C #: базовый, виртуальный и переопределить - PullRequest
1 голос
/ 17 сентября 2011

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

Ответы [ 3 ]

5 голосов
/ 17 сентября 2011

base

Это ключевое слово языка, которое используется для ссылки на базовый класс, класс, от которого наследуется текущий класс (расширяет).Когда вы создаете экземпляр класса, который расширяет другой, этот экземпляр также можно рассматривать или использовать в качестве базового класса.

virtual

Модификатор функции или свойства, которыйозначает, что свойство или функция могут быть переопределены в расширяющем классе (классе, который наследуется от базового класса, который определяет свойство или функцию).Переопределяющая функция или свойство должны иметь ту же сигнатуру, что и исходное определение, но реализация может быть изменена.Виртуальная функция или свойство должны быть немедленно реализованы в классе, где они определены, тогда как абстрактный метод или свойство реализуется только в расширяющем классе.

override

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

4 голосов
/ 17 сентября 2011

Просто прочитайте немного и документируйте себя; -)

Учебное пособие по уроку C # Station 9: Полиморфизм

base - это способ, которым вы обычно ссылаетесь на базовый класс, называемый super в Java, если я не ошибаюсь.

поэтому, когда внутри метода вы пишете base.Name, вы получаете свойство Name базового класса, от которого ваш класс унаследовал / получил.

2 голосов
/ 17 сентября 2011

base: используется при использовании элементов, которые определены для базового типа, а не для текущего типа.

virtual: методы и свойства могут быть виртуальными, что означает, что они могут быть переопределены более специализированными классами.

override: когда виртуальный метод должен быть переопределен с новой реализациейв нисходящем классе вы должны использовать это ключевое слово вместо virtual.

Пример:

class A {
  public void X() {}
  public virtual void Y() {}
}

class B: A {
  public new void X() {} // defines a new method which does not override A.X

  public override void Y() { // override A.Y with a new implementation
    base.Y(); // calls the A.Y implementation
  }

  public virtual void Z() {} // additional virtual method on B
}

A a = new B();
a.X(); // calls A.X, not B.X
a.Y(); // calls B.Y because it is virtual and overridden
a.Z(); // syntax error - Z does not exist on an instance of type A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...