静态属性及方法

一、静态字段

  @1、与实例字段一样,可以在声明的同时进行初始化。

@2、与实例字段不同,如果没有对静态字段进行初始化,静态字段将自动获取默认值(0,null,false等)。所以,一个静态字段即使没有被显示地赋值,也可以被访问。

二、静态属性

三、静态方法

@1、this关键字在静态方法中是无效的。因为静态方法不是通过一个特定的实例来引用的。

@2、一般静态方法不能访问类中的实例字段和实例方法,除非事先获得对字段和方法所从属于的那个特定的实例的引用(通过传递参数)。

四、静态构造器

    静态构造器用来对类而不是类实例进行初始化。静态构造器并不是显示调用的。”运行时“会在首次访问类(可能是调用一个普通构造器,可能是访问类的一个静态方法或静态字段)时自动调用静态构造器。

    我们使用静态构造器将类中的静态数据初始化成一个特定的值,尤其是在无法通过在声明时的一次简单地赋值来获得初始值的时候。

例如:  class Employee

{            static Employee()

       {    Random randomGenerator=new Randow();

            NextId=randomGenerator.Next(101,999);//生成一个100到1000的一个随机整数

      }

       public static int NextId=42;

}

说明:由于初始值涉及一个方法调用,无法通过在声明时的一次简单地赋值来完成。所以NextId的初始化代码被放到一个静态构造器中,而没有作为声明的一部分。

注意:@1、假如对NextId的赋值既在静态构造器中进行,又在声明时进行,那么当初始化结束的时候,最终获得的是什么值?观察C#编译器生成的CIL代码,发现声明时的赋值被移动了位置,成为静态构造器中的一个语句。因此,在静态构造器中进行的赋值将优先于声明字段时进行的赋值,这会实例字段的情况是一样的。

@2、没有静态终结器的说法。

@3、最好是在声明的同时完成静态初始化,而不要使用静态构造器。

五、静态类

@1、静态类不包含任何实例字段 ,实例方法。当创建一个能实例化的类没有意义是,就可以声明为静态类。

@2、c#编译器会自动在CIL代码中把静态类标记为abstract何sealed。这会将类指定为不可扩展即不能从他派生出其他类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值