我们可以在c#的方法中同时使用virtual和new关键字吗?

时间:2010-09-13 17:11:55

标签: c# function

我们可以在c#的方法中使用virtual和new关键字吗?

3 个答案:

答案 0 :(得分:7)

是。您将定义一个隐藏父项方法并允许子项覆盖的方法。但这种行为可能有点奇怪。假设您有以下课程:

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 :(得分:1)

是的,你可以将两者结合起来。

virtual允许在派生类中重写方法

new允许您隐藏旧方法。

两者都是互补的而不是矛盾的。

答案 2 :(得分:1)

不要犹豫,亲自尝试一下,Visual Studio让它变得简单。

class Base {
    public virtual void Method() { }
}
class Derived : Base {
    public virtual new void Method() { }
}