非虚方法和密封方法有什么区别?

Ahm*_*mad 9 c#

我有一个混乱,我想解决..在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.

  • 嗯......这是C#规范中"密封"的例子.但是非虚拟方法在哪里和差异的解释? (2认同)