黑马程序员---静态类总结

来源:互联网 发布:真三国无双5优化补丁 编辑:程序博客网 时间:2024/05/22 09:42

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

           1>调用静态方法的时候必须通过类名直接来调用,不能通过对象来调用,
           也就是说使用静态成员不需要实例化对象。
           2>静态成员会在整个应用程序退出时,才释放资源,所以可以在整个应用程序中共享数据。
            3>静态类不能被实例化,不能被继承。
            4>由于静态成员会在整个程序退出时,才释放资源,所以尽量避免写静态字段或静态属性,最好只写静态方法。
            5>当给一个普通类添加静态字段后,系统会默认为该类生成一个静态构造函数【静态构造函数不能有访问修饰符、并且也不能带参数】
            6>//静态类的构造函数,只会在第一次使用静态类之前,执行,并且只会执行一次。
            静态构造函数不能有访问修饰符,不能有参数。
            MyClass.M2();
            Console.ReadKey();
            1.什么情况下要将一个类标记为静态类
            - 一般情况是,当这个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这时可以将该类标记为static类,此时该类中只能包含静态成员,不能包含实例成员。比如:Convert、Math、File、Console....
            2.什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static?
            - 当这个类需要被实例化的时候。如果这个类中有一个成员是所有对象都共享的数据,这时可以将该类中的这个成员标记为静态的,但是这个类还是一个实例类。
            Console.WriteLine();

Math类等.
          
       静态类的构造函数,只会在第一次使用静态类之前,执行,并且只会执行一次。
        静态构造函数不能有访问修饰符,不能有参数。 
 
        类和方法前面,加上Sealed关键字后该类就不能被继承.

代码如下:
 

 public   sealed class C1  //sealed关键字    {      public   virtual void SayHello()        {                 }               }   public  class C2 : C1 //类C2不能继承C1了    {        public override void SayHello()        {          }    }//方法的密封public    class C1    {      public  sealed virtual void SayHello()        {                 }               }   public  class C2 : C1    {        public override void SayHello()  //不能重写这个方法了,报错        {                }    }}


静态成员、静态类在程序中的任何一个地方都可以访问。
不会因为超出了方法的作用域而不能访问。
所以静态成员、静态类只有在程序退出的时候才会释放资源。
例如:

class Person    {        public static int age;         public string Name        {            get;            set;        }    }  class Test    {         public void MyMethod()        {            Person per = new Person();            per.Name = "李四";            Person.age = 19;//在这个地方可以用        }    } class Program    {        static void Main(string[] args)        {            Person p = new Person();            p.Name = "张三";            Person.age = 18;//在这个地方也可以用            Test t = new Test();            t.MyMethod();            Console.WriteLine(p.Name);            Console.WriteLine(Person.age);            Console.ReadKey();        }    }

注意事项: 
静态构造函数必须用static关键字标记
静态构造函数不能有访问修饰符
静态构造函数不能有参数。
静态构造函数只会被调用一次。在第一次使用静态类前。
静态类不能被实例化,就不会有对象,而this表示的是当前对象。所以在静态类不能使用this.
        static StaticClass()
        {
 
        }
 
静态类不能被其他类继承
静态类只能继承自Object类。(静态类不能继承自其它类。)
继承(多态)、静态本身就是相反的。
静态类不能实现任何接口,(因为接口中的成员都是实例成员。*)
sealed:(*)密封类,不能被继承。
sealed关键字,表示类不能被继承。(密封类)
密封类表示不能被继承。String类。.net系统中本身对字符串有很多特殊处理(为String开了很多“绿灯”,String有很多特权,比如:不可变性,字符串池等等。),防止别的类继承后造成混乱。


禁止子类重写父类的方法。
静态类的本质abstract+sealed
静态类不能被实例化:abstract
静态类不能被继承:sealed


------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

原创粉丝点击