Насколько я вижу в С#,
виртуальные функции предназначены не только для полиморфизма,
это также для переопределения предупреждения метода скрытия компилятором
я прав ?
я приведу пример:
class A
{
public void func(int a)
{
....
}
}
class B:A
{
public void func(int a)
{
....
}
}
теперь я использую B x = new B();
, поэтому компилятор предупредит меня о том, что метод в классе B скрывает метод в A. Таким образом, есть 2 решения:
1) пометьте тот, что в B, ключевым словом New
2) сделать один в 'A' virtual
и один в B - Overriding
- это снимет предупреждение о сокрытии..
единственная разница будет с полиморфизмом A x = new B();
если в классе B будет 'new' - всегда будет вызываться тот из A, а если я использую virtual
и не новый механизм - будет вызываться тот из B называться.
поэтому виртуальный имеет 2 роли в .net: (пожалуйста, исправьте меня, если я ошибаюсь)
1) устранить предупреждение о сокрытии (в среде без полиморфизма)
2) и, конечно же, переопределение функций в среде yes-polymorphism.
пожалуйста, поправьте меня, если я ошибаюсь.