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

(技术等级:200)

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

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

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

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

    
static Test()
    
{
        Console.WriteLine(
"类型构造器");
    }

}

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

}

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

posted @ 2005-01-29 03:06 卡卡 ^ cacard 阅读(1186) 评论(6)  编辑 收藏 所属分类: C#&.netFramework

  回复  引用  查看    
#1楼 2005-01-29 08:30 | 生活、工作      
强烈支持你的倡议,同时你讨论的内容也非常好。
  回复  引用    
#2楼 2005-01-29 08:53 | tansm [未注册用户]
支持!
  回复  引用  查看    
#3楼 2005-01-29 10:44 | dudu      
对难度级别定义的建议非常好。支持!
根据你的建议, 博客园可以在发表文章时让大家选择相应的难度级别。
请问哪儿有关于MSDN难度级别定义的资料。

  回复  引用  查看    
#4楼 [楼主]2005-01-29 11:46 | caca(卡卡)      
@DUDU
难度级别定义(或者技术等级)是在"MSDN在线培训"里面的网络讲座里面定义的东西,例如这个讲座:
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242155
进入它的页面,QuickInfo里面的技术等级为300,点击右边的"I"的那个符号,就可以查看"难度级别定义",复制这些定义,需要查看HTML源.
  回复  引用    
#5楼 2005-01-29 21:22 | kevinlin [未注册用户]
n=2;//猛的一看实例字段和静态字段的访问没有什么区别

请问一下,我看<C# Premier>的时候,好像静态变量的初始化或者访问应该是这样的吧???

test.n=2
  回复  引用  查看    
#6楼 [楼主]2005-01-29 21:58 | caca(卡卡)      
你说的"test.n=2"应该是"Test.n=2"吧,在实例构造函数里面可以是"Test.n=2"或者直接"n=2",因为是static的,而且是在类的内部进行访问赋值.
我的"猛的一看实例字段和静态字段的访问没有什么区别"的意思关键是非静态字段m为什么可以"在没有构造类实例"的时候可以直接"m=1"呢?因为当调用实例构造器的时候,肯定有类的实例已经构造,这里的"m=2"就相当于"this.m=2".

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-01-29 03:11 编辑过


相关链接:
 



This is footer