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

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

 2009-06-03 08:30:36 来源:WEB开发网   
核心提示:我们创建了一个接口iii,它只有一个名为pqr的函数,《C# to IL》第四章 关键字和操作符(下),然后,类yyy实现了接口iii,它都会调用Finalize,没有办法销毁任何事物,但是没有实现函数pqr,而是添加了一个名为abc的函数

我们创建了一个接口iii,它只有一个名为pqr的函数。然后,类yyy实现了接口iii,但是没有实现函数pqr,而是添加了一个名为abc的函数。在入口点函数vijay中,函数pqr会被接口iii调用。

我们之所以没有得到任何错误,是因为override指令的存在。这个指令通知编译器重定向对接口iii的函数pqr以及对类yyy的函数abc的任何调用。编译器对override指令是非常严格的。可以从这样的事实中对此进行考量——如果在类yyy的定义中没有实现iii,那么我们就会得到下列异常:

Output

Exception occurred: System.TypeLoadException: Class yyy tried to override method pqr but does not implement or inherit that methods.

at zzz.vijay()

析构函数

a.cs

class zzz
{
public static void Main()
{
}
~zzz()
{
System.Console.WriteLine("hi");
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ret
}
.method family hidebysig virtual instance void Finalize() il managed
{
ldstr      "hi"
call void [mscorlib]System.Console::WriteLine(class System.String)
ldarg.0
call       instance void [mscorlib]System.Object::Finalize()
ret
}
}

No output

析构函数被转换为Finalize函数。在C#文档中也制定了这条信息。Finalize函数的调用源于Object。文本"hi"不会显示,因为只要运行时决定了,这个函数就会被调用。我们所知道的全部是——在对象“死亡”时Finalize就会被调用。因此,无论何时一个对象“死亡”,它都会调用Finalize。没有办法销毁任何事物,包括.NET对象在内。

1 2 3 4 5 6  下一页

Tags:to IL 第四章

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