我在MSDN(here)中发现以下代码似乎是错误的(编译时错误)。不是吗?
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
}
}
考虑这一行:
Test t = new C();
C 类不是从测试类派生的,因此这个赋值不会编译。我在这里遗漏了一些东西(我在文章中没有考虑过一些假设吗?)
即使C类派生自Test:
,以下行也会出错D cd2 = new D(t.M2);
不是吗?
答案 0 :(得分:5)
该行应为
C t = new C();
你也可以使用(在新版本的C#中)
var t = new C();
下一行t.M2
有效的唯一方法是t
类型为C
。