第4篇 静态

方法的一般访问方式

  1. 创建对象,通过对象访问方法。
  2. 通过类名直接访问的方法。

        注意:用类名直接调用的方法必须通过指定的修饰符来修饰,就是关键字static

静态的特点

static静态修饰关键字:

  1. 被静态修饰的成员,可以直接被类名调用
  2. 标识为static的字段,属性,方法,构造函数,事件等就是静态成员。
  3. 静态成员优先于对象存在。
  4. 静态成员随着类的加载而加载,随着类的消失而消失,静态成员的生命周期很长。

普通成员与静态成员的区别:

  1. 名称上不同。普通成员也叫实例成员、静态成员也叫类成员。
  2. 内存上不同。实例成员存储在堆内存的对象上,静态成员是方法表(MethodTable)数据结构的重要组成部分,他们在method table slot数组之后被分配在MethodTable上. 所有原始的静态类型都是内联的, 而静态值类型(结构体), 引用类型是通过AppDomain的handle table(句柄表)上的OBJECTREF来引用的. MethodTable中的OBJECTREF指向AppDomain的句柄表中的OBJECTREF, 这个OBJECTREF会使得堆上创建出来的对象实例一直存活下去, 直到AppDomain被卸载掉。(更详细信息请参照http://www.cnblogs.com/awpatp/archive/2009/11/11/1601397.html)
  3. 归属不同。实例成员归属于各自的实例对象,而静态成员归属于类。
  4. 生命周期不同。实例成员随着对象出现而出现,随着对象的消失而消失。静态成员随着类出现而出现,随着类消失而消失。

注意事项:

  1. 静态方法只能访问静态成员,不能访问非静态成员。这就是静态方法访问的局限性。
  2. 静态方法中不能出现this或者base关键字。(因为先来的不能访问后来的)
  3. 主函数是静态的。

何时使用静态

    成员变量:如果数据在所有对象中都是一样的,直接用静态修饰。

    成员函数:当函数没有访问对象中的数据成员时,就需要使用静态来修饰。

 

备注:下一篇将总结C#关于抽象的知识点。“第5篇 抽象

posted @ 2017-11-27 16:32  Hansen'sblog  阅读(143)  评论(0编辑  收藏  举报