实例构造器和类型构造器的一些比较

(技术等级:200)

实例构造器即实例构造函数,类型构造器也就是静态构造函数.

(1)在实例构造器里面,我们可以初始化类的实例字段和静态字段.
None.gif public   class  Test
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
private int m;
InBlock.gif    
private static int n;
InBlock.gif    
public Test()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        m
=1;//相当于this.m=1;
InBlock.gif
        n=2;//猛的一看实例字段和静态字段的访问没有什么区别
ExpandedSubBlockEnd.gif
    }

ExpandedBlockEnd.gif}
(2)在类型构造器里面我们只能初始化静态字段,其目的也在于此.
None.gif public   class  Test
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
private static int n=1;
InBlock.gif    
static Test()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        n
=2;
InBlock.gif        
//这里的n的最终值是1还是2呢?顺序是先初始化为1,然后被类型构造函数赋值为2    
ExpandedSubBlockEnd.gif
    }

ExpandedBlockEnd.gif}
(3)实例构造器和类型构造器触发的条件不一样.
实例构造器是在一个类的实例构造的时候被调用的,类型构造器是在类的第一次访问的时候被调用的.
那么,可以说:如果一个类的实例构造器被调用的话,那么它的类型构造器也一定会被调用(如果有的话),反之行不通.
None.gif public   class  Test
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public static int m;
InBlock.gif    
public Test()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Console.WriteLine(
"实例构造器");
ExpandedSubBlockEnd.gif    }

InBlock.gif    
static Test()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Console.WriteLine(
"类型构造器");
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
public   class  App
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Test.m
=1;
InBlock.gif        
//这个时候,Test类第一次被访问,所以会调用类型构造器,输出结果:"类型构造器"
InBlock.gif
        Test test=new Test();
InBlock.gif        
//这个时候,Test类不是第一次访问,但是创建一个类的实例,所以输出结果:"实例构造器"
InBlock.gif        
//如果把上面的第一行代码去掉的话,输出结果你应该知道了吧,还是亲自实践一下吧,嗯,用"#Develop"比较爽!
ExpandedSubBlockEnd.gif
    }

ExpandedBlockEnd.gif}

附:难度级别定义(来自MSDN)
100: 介绍性的、概括性资料的技术等级。假设对主题或所谈及的主题概念、功能、特性和优点有很少了解或不是十分了解。
200:中间层次资料的技术等级。假设具有100级的知识并有该主题的特定培训和学习。
300:高级资料的技术等级。假设具有200级的知识并且具有对真实应用环境特性的深刻了解和很熟练的编码技巧。提供对产品/技术特性的子集的详细技术概览,包括体系结构、性能、移植、部署和开发。
400: 专家级资料的技术等级。假设具有深层次的技术知识和经验,并且具有对主题的详细和全面的理解。提供专家到专家的互动和对特定主题的覆盖。
希望大家的文章也附带难度级别以做参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值