好吧,我有以下代码:(从我的书中复制)。
class MyDelegate
{
public delegate void Func(string s);
public void Show(string s)
{
Console.WriteLine("In MyD1: " + s);
}
}
class Test
{
static void Show(string s)
{
Console.WriteLine("In test: " + s);
}
static void Main(string[] args)
{
MyDelegate md = new MyDelegate();
MyDelegate.Func f= new MyDelegate.Func(md.Show);
MyDelegate.Func f1= new MyDelegate.Func(Show);
f("hello");
f1("Hello");
f1 = f;
f1("world");
}
}
输出为:In MyD1: hello
In TestShow Hello
InMyD1: world
现在,我不明白为什么输出的最后一行是在“InMyD1”中。 因为f1委托被调用而不是f。
提前致谢。
答案 0 :(得分:3)
你写了f1 = f
。
因此,您正在呼叫f
。
答案 1 :(得分:0)
f1
正在重新分配f
的函数引用。同样,如果您只是为其分配了另一个功能,例如:
f1 = s => Console.WriteLine("Another function: " + s);
你会得到其他输出。
答案 2 :(得分:0)
f1 = f;
这将f1设置为f,这就是为什么你有世界而不是Hello