Подтвердить что ты не робот

Как переопределить метод setter свойства в С#?

У меня есть класс с подклассом. Суперкласс имеет свойство Position. Подкласс должен выполнить дополнительную операцию, когда свойство Position будет изменено, поэтому я пытаюсь переопределить метод setter и вызывать сеттер.

Я думаю, что у меня есть функция setter, вызывающая суперкласс, но я не могу понять, как здесь работает основной синтаксис.

Вот моя лучшая попытка: code

Геттер существует только для доказательства концепции - предположим, я тоже хотел переопределить это?

Геттер и сеттер дают мне ошибки этой формы:

не может переопределить унаследованный элемент superClassName.Position. [gs] et ', потому что он не помечен как виртуальный, абстрактный или переопределенный

Здесь также прослеживается ошибка ошибок: errors

Я также попытался использовать ключевое слово override перед set. Удаление лишнего геттера не влияет.

Каков правильный синтаксис?

4b9b3361

Ответ 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