代表提问 - 基本

时间:2011-07-19 14:33:02

标签: c#

好吧,我有以下代码:(从我的书中复制)。

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。

提前致谢。

3 个答案:

答案 0 :(得分:3)

你写了f1 = f

因此,您正在呼叫f

答案 1 :(得分:0)

f1正在重新分配f的函数引用。同样,如果您只是为其分配了另一个功能,例如:

f1 = s => Console.WriteLine("Another function: " + s);

你会得到其他输出。

答案 2 :(得分:0)

f1 = f;

这将f1设置为f,这就是为什么你有世界而不是Hello