2011-07-19 7 views
0

申し訳ありませんが、私は次のコードを持っています:(私の本からコピー)。代理人の質問 - 基本

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"); 
    } 
} 

出力は次のようになります。出力の最後の行が「InMyD1」である理由In MyD1: hello In TestShow Hello InMyD1: world

は今、私は理解していませんでした。f1デリゲートが呼び出され、fではないためです。

ありがとうございます。

+1

の世界を持っている理由FザッツにF1を設定します。また、通常、あなたのコードとあなたの出力同期を持っているのは良い習慣です。出力に 'TestShow'がありますが、あなたのコードには含まれていません。 – Snowbear

答えて

3

f1 = fと書いてあります。

したがって、fを呼び出しています。

0

f1は、fの関数参照を再割り当てしています。同様に、あなただけのような、場所でそれを別の機能を割り当てた場合:

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

あなたは他の出力を取得したいです。

0
f1 = f; 

これはあなたの代わりにこんにちは