静态成员静态类+sealed关键字
1 2 //MyClass mc = new MyClass(); 3 //mc.M1(); 4 5 ////1>调用静态方法的时候必须通过类名直接来调用,不能通过对象来调用, 6 ////也就是说使用静态成员不需要实例化对象。 7 ////2>静态成员会在整个应用程序退出时,才释放资源,所以可以在整个应用程序中共享数据。 8 //3>静态类不能被实例化,不能被继承。 9 10 //4>由于静态成员会在整个程序退出时,才释放资源,所以尽量避免写静态字段或静态属性,最好只写静态方法。 11 12 //5>当给一个普通类添加静态字段后,系统会默认为该类生成一个静态构造函数【静态构造函数不能有访问修饰符、并且也不能带参数】 13 14 //6>//静态类的构造函数,只会在第一次使用静态类之前,执行,并且只会执行一次。 15 //静态构造函数不能有访问修饰符,不能有参数。 16 17 18 //MyClass.M2(); 19 //Console.ReadKey(); 20 21 22 23 //1.什么情况下要将一个类标记为静态类 24 //- 一般情况是,当这个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这时可以将该类标记为static类,此时该类中只能包含静态成员,不能包含实例成员。比如:Convert、Math、File、Console.... 25 26 //2.什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static? 27 //- 当这个类需要被实例化的时候。如果这个类中有一个成员是所有对象都共享的数据,这时可以将该类中的这个成员标记为静态的,但是这个类还是一个实例类。 28 //Console.WriteLine(); 29 // Math. 30 } 31 } 32 33 class MyClass 34 { 35 public void M1() 36 { 37 Console.WriteLine("M1"); 38 } 39 40 public static void M2() 41 { 42 Console.WriteLine("普通类中的一个静态方法..M2"); 43 } 44 }
sealed关键字有什么作用呢?
当我们使用虚方法virtual时,子类可以用override重写,并且子类的子类也可以重写,子子类依然可以重写,当我们不想让某个方法被子类在重写的时候我们就可以在这个方法前面加上一个sealed关键字。
1 public class Person 2 { 3 public string Name 4 { 5 get; 6 set; 7 } 8 9 public virtual void SayHi() 10 { 11 Console.WriteLine("hi in Person."); 12 } 13 } 14 15 class Chinese : Person 16 { 17 //禁止子类重写该方法。 18 public sealed override void SayHi() 19 { 20 Console.WriteLine("hi in Chinese"); 21 } 22 } 23 24 class BeiJingren : Chinese 25 { 26 //这里将不能再重写SayHi()方法,否则报错 27 //public override void SayHi() 28 //{ 29 // Console.WriteLine("hi in BeiJingren"); 30 //} 31 }