WEB开发网
开发学院软件开发C语言 《C# to IL》第四章 关键字和操作符(下) 阅读

《C# to IL》第四章 关键字和操作符(下)

 2009-06-03 08:30:36 来源:WEB开发网   
核心提示: 在C#中,有一条规则:基类的可访问性要大于派生类,《C# to IL》第四章 关键字和操作符(下)(5),这条规则在IL中不适用,从而,这个类对包含在它内部的函数具有更多的约束,再说一遍,即使基类xxx是私有的而派生类yyy是公共的,也不会在IL中生成任何错误

在C#中,有一条规则:基类的可访问性要大于派生类。这条规则在IL中不适用。从而,即使基类xxx是私有的而派生类yyy是公共的,也不会在IL中生成任何错误。

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ret
}
}

在C#中,一个函数的可访问性不能大于它所在类的可访问性。函数vijay是公有的,然而它所在的类却是私有的。因此,这个类对包含在它内部的函数具有更多的约束。再说一遍,在IL中没有强加这样的约束。

a.cs

class zzz
{
public static void Main()
{
yyy a = new yyy();
xxx b = new xxx();
a = b;
b = (xxx) a;
}
}
class yyy
{
}
class xxx : yyy
{
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (class yyy V_0,class xxx V_1)
newobj     instance void yyy::.ctor()
stloc.0
newobj     instance void xxx::.ctor()
stloc.1
ldloc.1
stloc.0
ldloc.0
castclass xxx
stloc.1
ret
}
}
.class private auto ansi yyy extends [mscorlib]System.Object
{
}
.class private auto ansi xxx extends yyy
{
.method public hidebysig specialname rtspecialname instance void .ctor() il managed
{
ldarg.0
call       instance void yyy::.ctor()
ret
}
}

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:to IL 第四章

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