WEB开发网
开发学院软件开发C语言 浅谈 Microsoft C# 编译器和 Mono C# 编译器 阅读

浅谈 Microsoft C# 编译器和 Mono C# 编译器

 2009-05-09 08:26:41 来源:WEB开发网   
核心提示: 图片看不清楚?请点击这里查看原图(大图),这下,浅谈 Microsoft C# 编译器和 Mono C# 编译器(5),Micorsoft 和 mono 生成的代码又完全一样,奇怪,block.cs(9,12):errorCS0843:必须对自动实现的属性“Skyiv.Ben.

图片看不清楚?请点击这里查看原图(大图)。

这下,Micorsoft 和 mono 生成的代码又完全一样,奇怪。

下面就是 Block 结构的构造函数:

浅谈 Microsoft C# 编译器和 Mono C# 编译器

图片看不清楚?请点击这里查看原图(大图)。

浅谈 Microsoft C# 编译器和 Mono C# 编译器

图片看不清楚?请点击这里查看原图(大图)。

从上图中可以看出,Microsoft 生成的代码除了有多余的 nop 以外,还多了以下一行:

IL_0001: initobj  Skyiv.Ben.Test.Block

这一行代码,是用来调用 Block 结构的默认(无参的)构造函数,对应下面 C# 源程序代码:

public Block(int id) : this() { Id = id; }

中的“ : this() ” 。

如果删除这个“ : this() ” ,用 Microsoft C# 编译器编译时就会出错,如下所示:

E:work2> csc block.cs
适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.1 版
版权所有(C) Microsoft Corporation。保留所有权利。

block.cs(9,28): error CS0188: 在给“this”对象的所有字段赋值之前,无法使用该对象
block.cs(9,12): error CS0843:
    必须对自动实现的属性“Skyiv.Ben.Test.Block.Id”的支持字段完全赋值,才能
    将控制返回给调用方。请考虑从构造函数初始值设定项中调用默认构造函数。
block.cs(9,12): error CS0843:
    必须对自动实现的属性“Skyiv.Ben.Test.Block.Time”的支持字段完全赋值,才
    能将控制返回给调用方。请考虑从构造函数初始值设定项中调用默认构造函数。

E:work2> 

上一页  1 2 3 4 5 6  下一页

Tags:Microsoft 编译器 Mono

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接