C#里,派生类的方法里的匿名delegate调用基类的方法会产生无法验证的代码
2009-06-04 08:30:17 来源:WEB开发网核心提示: 在Unified C# 3.0 Specification的1.10 Enum中,规定了 引用In order for the default value of an enum type to be easily available, the literal 0 implicitly co
在Unified C# 3.0 Specification的1.10 Enum中,规定了
引用
In order for the default value of an enum type to be easily available, the literal 0 implicitly converts to any enum type.
与前几个版本的规定没怎么改变,仍然是说“字面量0”而不是“编译时常量0”可以被转换为任意枚举类型。
于是.NET Framework与Mono都“很无奈”的在这点上无法与规范保持一致了。=_=||
C#里派生类的方法里的匿名delegate调用基类的方法会产生无法验证的代码
原文:Why are base class calls from anonymous delegates nonverifiable?
前面开篇花絮里提到的是没有熟思而做的优化带来的后果,而下面要关注的问题就稍微复杂一些了。
考虑这段代码片段:
引用
C#代码
using System;
public delegate void D( );
public class Alpha {
public virtual void Blah( ) {
Console.WriteLine( "Alpha.Blah" );
}
}
public class Bravo : Alpha {
public override void Blah( ) {
Console.WriteLine( "Bravo.Blah" );
base.Blah( );
}
public void Charlie( ) {
int x = 123;
D d = delegate {
this.Blah( );
base.Blah( );
Console.WriteLine( x );
};
d( );
}
}
class Program {
// do nothing, just to make the compiler happy
// else we'd compiler with /target:library
public static void Main(string[] args) { }
}
- ››方法 (Array)
- ››方法和作用域中的内部类
- ››方法调用的绑定
- ››派生线程类
- ››匿名FTP服务器的建立与应用
更多精彩
赞助商链接