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

Виртуальное ключевое слово С#

Является ли виртуальный метод обязательным для переопределения его подклассом?

4b9b3361

Ответ 1

Если метод не является виртуальным (или абстрактным), он не может быть переопределен в подклассе. Единственный вариант - использовать ключевое слово new, чтобы скрыть унаследованный метод, но это обычно не рекомендуется, поскольку приведение экземпляра подкласс к родительскому классу и вызов метода приведет к тому, что метод родительского класса вместо этого вызывается, и это, вероятно, не является предполагаемой функциональностью.

Короче говоря, да, он должен быть виртуальным, чтобы переопределить, но вы не должны его переопределять. Если вы этого не сделаете, вместо него будет вызываться версия базового класса. Но если вы переопределите его, даже если вы примените объект к его базовому типу класса, вызывается производная версия метода, в отличие от скрытия метода с новым.

Хорошо знать разницу между переопределением и скрытием метода, поскольку на первый взгляд, и если вы его протестируете, может показаться, что он делает то же самое, но вернется, чтобы укусить вас позже, t, как и ожидалось, и вы не знаете, почему.

Ответ 2

Нет, когда вы используете "виртуальное" ключевое слово, вам решать, хотите ли вы переопределить или нет. Когда вы используете "абстрактный", вам необходимо переопределить метод в производном классе. Для получения дополнительной информации см.:

Ответ 3

Нет. Его можно переопределить подклассом, но не обязательно.

Если вы хотите принудительно выполнить переопределение подклассами, используйте abstract в классе abstract или используйте интерфейс (что означает, что вы должны реализовать все объявленные члены).

Ответ 4

Является ли виртуальный метод обязательным для переопределения его подклассом?

Нет.

Можно ли переопределить метод NON-Virtual в родительском классе?

Нет.

Что такое YES?

Вы должны реализовать абстрактный метод родительского класса (если производный класс не абстрактный)

Могу ли я написать виртуальное ключевое слово в статическом методе

NO, потому что эти два являются просто противоположными словами. Компилятор виртуальных средств во время компиляции не знает, какой метод следует вызывать. Статический означает, что ваш компилятор знает, какой метод будет вызываться.

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

Отметьте его закрытым ключевым словом.

Является ли также абстрактным методом виртуальным?

ДА. Вот почему мы не можем явно отмечать абстрактный метод виртуальным.

Является ли Override и Overload одинаковым?

Вне курса нет! Перегрузка имеет 2 метода с одинаковым именем, но работает с различным набором входных параметров.

Когда я должен пометить метод как виртуальный?

Когда вы используете полиморфизм, и вы не уверены в том, что тип объекта переходит к вашему методу до выполнения, и вы хотите, чтобы ваши подклассы имели другое поведение, пометьте этот метод как виртуальный. например У вас

class Law
{
 public void Punish(Minister any)
 {
    if (any.Corruption() == true)
      {
        ... do whatever public wants...
      }
 }
}

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

Ответ 5

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

Ответ 6

Не обязательно переопределять виртуальные методы, которые не являются абстрактными.

Обязательно применять абстрактные методы, если вы также не отмечаете абстрактный класс.

Ответ 7

Нет, необязательно переопределять виртуальный метод в производном классе.

Ответ 8

да для переопределения вам нужно написать виртуальное ключевое слово. или написать абстрактный метод.

Ответ 9

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