static学习笔记

蓦然发现,脑子里对关键字static是一滩浆糊,只知道是表示静态,具体该用在什么场合,用了有什么好处和坏处等,说不清道不明。作为开发人员真汗颜啊。。。赶紧学习一下

static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。

静态类:

1.仅包含静态成员

静态类中的所有成员必须是静态的,静态类不能包含实例成员。

常数或者类型声明隐式地是静态成员,除此之外,静态类成员都应该加static修饰符。

     static  class CompanyEmployee
    {
         static  string member;
         const  string member2 =  " test ";
         public  static  void DoSomething() {  /* ... */ }
         public  static  void DoSomethingElse() {  /* ... */  }
    }

2.不能被实例化

不能使用new关键字创建静态类的实例。

3.是密封的

不能继承一个静态类。

4.不能包含实例构造函数

可以包含静态构造函数。静态构造函数可以用于静态类,也可以用于非静态类。静态构造函数无访问修饰符无参数,只有一个static标志。静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。

 

     static  class Cat
    {
         private  static  int statics =  0;
         static Cat()
        {
            statics++;
        }
         public  static  void HowManyCats()
        {
            Console.WriteLine( " {0} cats adopted ", statics);
        }
    }
     public  class Tester
    {
         static  void Main()
        {
            Cat.HowManyCats();
            Cat.HowManyCats();
            Console.ReadKey();
        }
    }

结果:

1 cats adopted

1 cats adopted

5. 静态与非静态的性能比较

静态的从程序一启动就会一直占用内存,而非静态的只在实例化后才会占用内存,但是每实例化一个对象时就会占用一份内存。

6. 何时使用静态类?

当类中没有依赖对象标识的数据或行为时,就可以使用静态类。当类中有依赖对象标识的数据或行为时,就不能使用静态类。

经常调用的类,应该设计成静态的。不经常调用的类,应该设计成非静态的。

静态成员

静态成员通常用于表示不会随对象状态而变化的数据或计算,无论对象发生什么更改,静态成员都不会随之变化。

不需要创建类的实例就可以调用该类中的静态方法、字段、属性或事件。

如果创建了类的实例,不能通过使用实例来访问静态成员。

静态方法和属性只能访问静态字段和静态事件。静态方法调用非静态的方法,必须先实例化一个对象。

静态类的一个重要特点就是共享,所以通常使用静态变量来保存当前类的实例数目。

     class Cat
    {
         private  static  int statics =  0;
         public Cat()
        {
            statics++;
        }
         public  static  void HowManyCats()
        {
            Console.WriteLine( " {0} cats adopted ", statics);
        }
    }
     public  class Tester
    {
         static  void Main()
        {
            Cat.HowManyCats();
            Cat cat1 =  new Cat();
            Cat.HowManyCats();
            Cat cat2 =  new Cat();
            Cat.HowManyCats();
            Cat.HowManyCats();
            Console.ReadKey();
        }
    }

结果:

0 cats adopted

1 cats adopted

2 cats adopted

2 cats adopted

 

不可以使用this来引用静态方法或属性访问器

若要访问静态成员,应该使用类名而不是变量名来指定该成员的位置

public  class Automobile
{
     public  static  int NumberOfWheels =  4;
     public  static  int SizeOfGasTank
    {
         get
        {
             return  15;
        }
    }
     public  static  void Drive() { }
     public  static  event EventType RunOutOfGas;

     // other non-static fields and properties...
}

访问写法:
Automobile.Drive();
int i = Automobile.NumberOfWheels;

 

转载于:https://www.cnblogs.com/niuniu1985/archive/2011/12/22/2290206.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值