我在MSDN(这里)中发现以下代码似乎是错误的(编译时错误).不是吗?
delegate void D(int x);
class C
{
public static void M1(int i) {...}
public void M2(int i) {...}
}
class Test
{
static void Main() {
D cd1 = new D(C.M1); // static method
Test t = new C(); // <---- WRONG-------
D cd2 = new D(t.M2); // instance method
D cd3 = new D(cd2); // another delegate
}
}
Run Code Online (Sandbox Code Playgroud)
考虑这一行:
Test t = new C();
Run Code Online (Sandbox Code Playgroud)
C类不是从Test类派生的,因此这个赋值不会编译.我在这里遗漏了一些东西(我在文章中没有考虑过一些假设吗?)
即使C类派生自Test,以下行也会出错:
D cd2 = new D(t.M2);
Run Code Online (Sandbox Code Playgroud)
不是吗?
这条线应该是
C t = new C();
Run Code Online (Sandbox Code Playgroud)
你也可以使用(在新版本的C#中)
var t = new C();
Run Code Online (Sandbox Code Playgroud)
t.M2下一行有效的唯一方法是if是否t有类型C.
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |