我有一个混乱,我想解决..在C#中,只有带有virtual标记的基类方法可以在派生类中重写.virtual无法覆盖没有标记的基类方法.充其量,派生类可以使用隐藏基类方法new.然后我们有sealed方法,也不能在基类中重写.
那么,密封方法和标准非虚方法有什么区别?
另一个相关问题.可以sealed使用派生类替换基类方法new吗?
Joh*_*ner 12
sealed防止任何进一步覆盖链上的虚拟方法.您只能定义sealed被覆盖的方法.看一下以下文档sealed:http://msdn.microsoft.com/en-us/library/aa645769( v = vs.71).aspx
他们给出了密封使用的一个很好的例子:
using System;
class A
{
public virtual void F() {
Console.WriteLine("A.F");
}
public virtual void G() {
Console.WriteLine("A.G");
}
}
class B: A
{
sealed override public void F() {
Console.WriteLine("B.F");
}
override public void G() {
Console.WriteLine("B.G");
}
}
class C: B
{
override public void G() {
Console.WriteLine("C.G");
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,任何派出的人都B可以覆盖G,但不能F.