Может ли метод или свойство быть помеченным как abstract и override одновременно?

среда, 9 февраля 2011, Александр Краковецкий

Первый ответ: "конечно же нет". Но, оказывается такой вариант возможен.

Рассмотрим такую ситуацию: есть некий класс, который содержит свойство, которое по умолчанию возвращает пустую строку и помеченное как virtual:

abstract class Thingy
{
  public virtual string Name { get { return ""; } }
}

Нам необходимо создавать большое количество наследников Thingy, которые будут иметь пустные имена. Но нам также необходимо иметь коллекцию классов с непустыми именами. И мы хотим быть уверенными, что разработчики переопределят этот метод. В таком случае нужно использовать такой код:

abstract class FrobThingy : Thingy
{
  public abstract override string Name { get; }
} 

Если разработчики не переопределят свойство Name для всех наследников FrobThingy, то компилятор выдаст сообщение об ошибке. Собственно, чего мы и добивались.


Ищите нас в интернетах!

Комментарии

Свежие вакансии