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

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

 2009-06-03 08:30:36 来源:WEB开发网   
核心提示: ErrorException occurred: System.TypeLoadException: Could not load class 'aa' because the format is bad (too long?) at zzz.vijay()在C#中,循环引

Error

Exception occurred: System.TypeLoadException: Could not load class 'aa' because the format is bad (too long?)

at zzz.vijay()

在C#中,循环引用是禁止的。编译器会检查循环引用,并且如果发现了它,就会报告一个错误。然而,IL并不检查循环引用,因为Microsoft不希望所有的程序员都使用纯的IL。

因此,类aa继承自类bb,类bb继承自类cc,最后类cc又继承自类aa。这就形成了一个循环引用。在运行时抛出的异常不会给出循环引用的任何迹象。从而,如果我在这里没有为你揭示这个秘密,那么这个异常就可能让你感到困惑。我并不打算显摆对理解IL有多深这样的事实,但是偶尔给出一些提示信息是无妨的。

a.cs

internal class zzz
{
public static void Main()
{
}
}

a.il

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

访问修饰符,如关键字internal,只是C#词法的一部分,而与IL没有任何关系。关键字internal表示这个特定的类只能在它所在的文件中被访问到。

因此,通过掌握IL,我们能够区分.NET核心和C#领域存在的特性之间的不同。

a.il

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

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

Tags:to IL 第四章

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