我们可以在c#的方法中使用virtual和new关键字吗?
答案 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() { }
}