Как переопределить метод setter свойства в С#?
У меня есть класс с подклассом. Суперкласс имеет свойство Position
. Подкласс должен выполнить дополнительную операцию, когда свойство Position
будет изменено, поэтому я пытаюсь переопределить метод setter и вызывать сеттер.
Я думаю, что у меня есть функция setter, вызывающая суперкласс, но я не могу понять, как здесь работает основной синтаксис.
Вот моя лучшая попытка:
![code]()
Геттер существует только для доказательства концепции - предположим, я тоже хотел переопределить это?
Геттер и сеттер дают мне ошибки этой формы:
не может переопределить унаследованный элемент superClassName.Position. [gs] et ', потому что он не помечен как виртуальный, абстрактный или переопределенный
Здесь также прослеживается ошибка ошибок:
![errors]()
Я также попытался использовать ключевое слово override перед set
. Удаление лишнего геттера не влияет.
Каков правильный синтаксис?
Ответы
Ответ 1
Переопределение отлично. Однако, как указано в сообщении об ошибке, вам нужно пометить свойство в базовом классе как виртуальное, чтобы его можно было переопределить:
public virtual Vector2 Position
В отличие от Java, члены класса по умолчанию не являются виртуальными в С#. Если вы не можете изменить базовый класс, вам не повезло.
Ответ 2
Свойство Position
не является виртуальным в базовом классе, поэтому вы не можете его переопределить. Если вы сделаете его виртуальным, вы сможете его переопределить.
Он становится немного беспорядочным, переопределяя один бит без другого - это не то, что я делаю очень часто, поэтому мне придется поиграть с ним, чтобы убедиться в том, что происходит, но первое, что нужно сделать было бы изменить свойство базового класса...
Это также то, что вам сообщает сообщение компилятора:
не может переопределить унаследованный элемент superClassName.Position. [gs] et ', потому что он не помечен как виртуальный, абстрактный или переопределенный
Это говорит вам что-то о свойстве базового класса - так что вам нужно изменить, чтобы переопределить его. Сообщения компилятора помогут вам обратить на них пристальное внимание!
Ответ 3
в базовом классе: добавьте ключевое слово virtual
Ответ 4
В сообщении об ошибке указывается проблема:)
Вы не можете переопределять элементы, которые не являются виртуальными (или абстрактными) в первую очередь.
В определении вашего суперкласса должно быть virtual
:
public virtual Vector2 Position { ... }
Ответ 5
Вы не можете переопределить элементы, не помеченные как virtual
или abstract
Отметьте ваше свойство Vector2
в суперклассе как virtual
.
public virtual Vector2 Position