мы можем использовать как виртуальное, так и новое ключевое слово в методах c #? - PullRequest
4 голосов
/ 13 сентября 2010

можем ли мы использовать как виртуальное, так и новое ключевое слово в методах c #?

Ответы [ 3 ]

7 голосов
/ 13 сентября 2010

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

public class A
{
    public void DoSomething(){ Console.WriteLine("42!"); }
}

public class B : A
{
    public virtual new void DoSomething(){ Console.WriteLine("Not 42!"); }
}

public class C : B
{
    public override void DoSomething(){ Console.WriteLine("43!"); }
}

Тогда ваше исполнение будет выглядеть примерно так:

A a = new A();
A bAsA = new B();
A cAsA = new C();
B b = new B();
B cAsB = new C();
C c = new C();

a.DoSomething(); // 42!

b.DoSomething(); // Not 42!
bAsA.DoSomething(); // 42!

c.DoSomething(); // 43!
cAsB.DoSomething(); // 43!
cAsA.DoSomething(); // 42!
1 голос
/ 13 сентября 2010

Не стесняйтесь просто попробовать это сами, Visual Studio упростит задачу.

class Base {
    public virtual void Method() { }
}
class Derived : Base {
    public virtual new void Method() { }
}
1 голос
/ 13 сентября 2010

Да, вы можете комбинировать оба.

virtual позволяет переопределить метод в производном классе

new позволяет скрыть старый метод.

Оба дополняют друг друга и не противоречат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...