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

本文详细介绍了C#中的密封类和密封方法的概念及使用方法。解释了密封类不可被继承的特点及其对虚方法的影响,并展示了如何创建密封方法来防止在派生类中被重写。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值