C#中的应用程序接口介绍及实现,密封类与密封方法

2020-01-05 09:55:13于丽

定义:用修饰符sealed进行标记的方法

作用:使用sealed修饰符可以防止派生进一步重写该方法、

注意:如果实例方法包含sealed修饰符,则必须也包含override修饰符
要在方法中适应sealed关键字 ,必须现在基类上将其声明为重写,如果基 类上不希望有重写的方法或者属性,就不要将其声明为virtual(也就是说:密封方法是被重写的方法,不是重写的方法不能被密封)

注意:密封类中不能包含虚方法(virtual)和抽象方法(abstract),因为密封的类没有为派生类提供实现虚方法和抽象方法的机会。

在把类或者方法标记为sealed时要小心,以为这么做会严重限制他的使用。即使不希望他能继承一个类或重写类的某个成员,仍有可能在将来的某个时刻,有人会遇到预料不到的情形

.NET基类库大量使用了密封类,使希望从这些类中派生出自己的第三方开发人员无法访问这些类,例如string就是一个密封类。


using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
namespace qq 
{ 
 class class1 
 { 
  public virtual void seaText() 
  { 
   Console.WriteLine("这是一个未密封的方法!"); 
  } 
 } 
 sealed class class2 : class1 
 { 
  public sealed override void seaText() 
  { 
   Console.WriteLine("这是一个密封的方法!"); 
  } 
 } 
 /*class class3 : class2//密封类不能被继承 
 { 
  public override void seaText()//不能重写密封方法 
  { 
   Console.WriteLine("这是一个不能运行的方法!"); 
  } 
 }*/
 class Program 
 { 
  static void Main(string[] args) 
  { 
   class2 c2 = new class2(); 
   c2.seaText(); 
   Console.ReadLine(); 
  } 
 } 
}

密封类除了不能被继承外,其他与非密封类一样,密封方法则必须通过重写基类中的虚方法实现。