Как переопределить метод установки свойства в C #? - PullRequest
25 голосов
/ 17 июня 2011

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

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

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

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

Получатель и установщик выдают мне ошибки этой формы:

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

Вот скриншот ошибок тоже для хорошей меры: errors

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

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

Ответы [ 5 ]

38 голосов
/ 17 июня 2011

Переопределение в порядке. Однако, как говорится в сообщении об ошибке, необходимо пометить свойство в базовом классе как виртуальное, чтобы иметь возможность его переопределить:

public virtual Vector2 Position

В отличие от Java, члены класса по умолчанию не являются виртуальными в C #. Если вы не можете изменить базовый класс, вам не повезло.

7 голосов
/ 17 июня 2011

Ваше свойство Position не является виртуальным в базовом классе, поэтому вы не можете переопределить его.Если вы сделаете его виртуальным, вы сможете переопределить его.

Перезаписывать один бит без другого немного беспорядочно - это не то, что я делаю очень часто, поэтому мне придется игратьчтобы убедиться в том, что происходит, но первое, что нужно сделать , это изменить свойство базового класса ...

Это также то, что говорит сообщение компилятора.Вы:

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

Это говорит вам кое-что освойство базового класса - вот что вам нужно изменить, чтобы переопределить его.Сообщения компилятора помогут вам - обратите на них пристальное внимание!

5 голосов
/ 17 июня 2011

Проблема указана вам в сообщении об ошибке:)

Вы не можете переопределить элементы, которые не являются виртуальными (или абстрактными).

Ваш суперкласс должен иметь virtual в определении свойства:

public virtual Vector2 Position { ... }
5 голосов
/ 17 июня 2011

в вашем базовом классе: добавьте ключевое слово virtual

3 голосов
/ 17 июня 2011

Вы не можете переопределить членов, не помеченных как virtual или abstract

Отметьте свое свойство Vector2 в суперклассе как virtual.

public virtual Vector2 Position
...