C#_基础_密封类和密封方法关键字sealed(二十)

sealed:

  adj. 密封的;未知的

  v. 封闭;盖印(seal的过去分词)

被sealed修的类:密封类

修饰的方法: 密封方法

密封类:可以继承其他类,不可以被其他类继承

密封方法: 密封方法,在派生类中该方法不可以重写

密封类不可以被继承,那么密封类中不可以有虚方法和抽象方法。

 1 namespace 密封类
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7         }
 8     }
 9 
10     //密封类:不能够被继承,可以继承别人 sealed
11     class Person
12     {
13 
14     }
15     sealed class   Man:Person  //密封类可以继承别人
16     {
17 
18     }
19     class Student //:Man  不能继承密封类
20     {
21         
22     }
23 }

sealed: 密封方法后必须由override,也就说密封方法必须先是重写父类的方法,重写, 然后才能变成密封方法

 1     class Person
 2     {
 3         public virtual void Run()
 4         {
 5 
 6         }
 7     }
 8     class   Man:Person  //密封类可以继承别人
 9     {
10         public sealed  void Run()
11         {
12 
13         }
14     }

密封方法:派生类中不可以重写密封方法,子类可以继承到密封类

 1     class   Man:Person  //密封类可以继承别人
 2     {
 3         public sealed  override void Run()
 4         {
 5             Console.WriteLine("man");
 6         }
 7     }
 8     class Student :Man 
 9     {
10         public override void Run()
11         {
12             Console.WriteLine("student");
13         }
14     }

但是可以隐藏掉父类的方法:new

 1     class Person
 2     {
 3         public virtual void Run()
 4         {
 5 
 6         }
 7     }
 8     class   Man:Person  //密封类可以继承别人
 9     {
10         public sealed  override void Run()
11         {
12             Console.WriteLine("man");
13         }
14     }
15     class Student :Man 
16     {
17         public new void Run()
18         {
19             Console.WriteLine("student");
20         }
21     }

子类可以继承到密封类

 1 namespace 密封类
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7       //输出结果都是man,可以密封方法可以被子类继承到
 8             Student s = new Student();
 9             s.Run();
10 
11             Man m = new Student();
12             m.Run();  
13 
14             Console.ReadKey();
15         }
16     }
17 
18     //密封类:不能够被继承,可以继承别人 sealed
19     class Person
20     {
21         public virtual void Run()
22         {
23 
24         }
25     }
26     class   Man:Person  //密封类可以继承别人
27     {
28         public sealed  override void Run()
29         {
30             Console.WriteLine("man");
31         }
32     }
33     class Student :Man 
34     {
35     }
36 }

在标记密封类或密封方法要慎重。

原文地址:https://www.cnblogs.com/CeasarH/p/9185823.html