Я хотел бы объявить переменные уровня класса для группы дочерних классов, подобных этому в python: Static class variables in Python. Я узнал, что атрибут shared
- это, вероятно, то, что я хочу использовать, но я не совсем уверен, где его использовать.Объявить переменные уровня класса в дочернем классе
Вот моя ситуация: Я делаю кучу разных типов символов для игры (100+). Все типы символов имеют одинаковый набор свойств, поэтому я создал базовый класс, который включает все свойства и необходимые внутренние переменные. Каждый тип символа имеет набор неизменяемых свойств, которые абсолютно одинаковы для каждого экземпляра заданного типа символа, но различаются между типами символов. Я хотел бы содержать свойства неизменяемого символьного типа как «переменные» класса в дочерних классах (один дочерний класс для типа символа), как в ответе на приведенный выше пример python.
Ключ в том, что я хотел бы ссылаться на некоторые свойства БЕЗ создания экземпляра подкласса.
Моя проблема заключается в том, что я не могу понять, что нужно использовать, чтобы правильно это сделать или как мой код должен быть организован, чтобы это произошло. Я попробовал поделиться свойствами, которые в конечном итоге позволили мне получить свойства из дочернего класса, а не только экземпляр дочернего элемента, но затем он не вернет свойство, которое я назначил в дочернем классе, используя Shared
или Shared Shadows
. Я хотел бы сохранить свойства в базовом классе, так что мне не нужно копировать и вставлять те же свойства для каждого дочернего класса.
Вот некоторые образцы моего кода:
Public MustInherit Class Char
'IMMUTABLE INFORMATION
' CharType Traits
Shared _ID As Integer
Shared _Species As String
Public Shared ReadOnly Property Species As String
Get
Return _Species
End Get
End Property
End Class
Public Class CharCat
Inherits Char
Shared Shadows _Species = "Cat"
End Class
Цель состоит в том, чтобы иметь возможность ввести CharCat.Species
и он вернется "Cat"
. Я знаю, что этот пример избыточен с именем класса, но для других свойств это не так.
Я бы не назвал класс 'Char', поскольку это зарезервированное слово – Michael
« Я хотел бы сохранить свойства в базовом классе, так что мне не нужно копировать и вставлять те же свойства для каждого дочернего класса. " Вы должны копировать и вставлять объявление переменной в каждый класс. Кроме того, если свойство ReadOnly, ему действительно нужна личная переменная? Почему бы просто не вернуть соответствующую строку для каждого подтипа? –
@Idle_Mind, я бы хотел, чтобы код был короче и легче читать. Если возможно, было бы неплохо, чтобы каждый дочерний класс имел одну строку на набор свойств/переменных. Решение NoAlias работает ниже, и если для каждого типа символа требуется 5 строк на каждое свойство, для каждого типа символа должно быть 5 строк на одно свойство, но если я могу его конденсировать, я бы с удовольствием. – Paul