Цель:
Я пытаюсь реализовать систему компонентов сущности, и я застрял в реализации своего компонента. Я намерен иметь общий тип компонента, который содержит статический бит для каждого компонента, например компоненты типа Position имеют Bit = 0, компоненты типа Sprite имеют Bit = 1 и т. д. Компонент должен состоять только из значений, которые он хранит, поэтому я начал со структур. Ниже приводится моя попытка (не рабочий код):
struct Position : Component<Position> //this does not work in c#
{
public int x, y;
}
internal struct ComponentBit
{
public static int bitCounter = 0;
};
public struct Component<T>
{
public static readonly int bit;
static Component()
{
bit = ComponentBit.bitCounter++;
}
public int GetBit()
{
return bit;
}
}
После этого я обнаружил, что структуры не могут быть унаследованы, поэтому я попытался изменить структуры на классы, которые работали.
Вопрос:
Есть ли способ реализовать эти функции с помощью структур, как это было бы возможно в C ++ (шаблонах)? Я хотел бы сохранить их как типы значений, а не ссылочные типы в целях реализации / производительности позже.
Редактировать1:
Предполагаемое использование, которое я хотел бы иметь:
Position pos = new Position(x, y);
int bit1 = pos.GetBit(); // or
int bit2 = Position.bit; // both should be possible
Component<T>
предназначен для работы как тип для словаря int. Вы можете сделать это. Нет необходимости наследовать от него. - person Theraot   schedule 10.12.2019