none
這兩個delegate 程序有什麼分別?? RRS feed

  • 問題

  • 照著這裡做:

    泛型委派

    http://msdn2.microsoft.com/zh-tw/library/sx2bwtw7(VS.80).aspx

    但看不出有什麼不同..

    分別為Button 1和Button2 .

     

    //delegate 1
    public delegate void ListVoid<T>(T voidItem);
    public static void WriteNumber1(int i)
    {
        Console.WriteLine("Button 2 " + i.ToString());
    }
    ListVoid<int> m1 = new ListVoid<int>(WriteNumber1);
    private void button2_Click(object sender, EventArgs e)
    {
        m1.Invoke(123);
    }
    
    //delegate 2
    public delegate void NormalVoid(int WriteNumber2);
    public static void WriteNumber2(int i)
    {
        Console.WriteLine("Button 3 " + i.ToString());
    }
    private void button3_Click(object sender, EventArgs e)
    {
        NormalVoid m2 = new NormalVoid(WriteNumber2);
        m2.Invoke(456);
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    2008年1月15日 上午 09:24

所有回覆

  • 程式碼區塊

    //delegate 1
    public delegate void ListVoid<T>(T voidItem);
    public static void WriteNumber1(T i)
    {
        Console.WriteLine("Button 2 " + i.ToString());

    }

     

    ListVoid<int> m1 = new ListVoid<int>(WriteNumber1);
    private void button2_Click(object sender, EventArgs e)
    {
        m1.Invoke(123);

        m1.Invoke(123.45);

        m1.Invoke("12345");
    }

     

     

    試看看。
    2008年1月15日 上午 09:36
    版主
  •  

    把int replace做 紅色字的T後,compile時出現錯誤

    說找不到T 的namespace @@

    2008年1月16日 上午 02:50
  • 那:

    程式碼區塊

    //delegate 1
    public delegate void ListVoid(T voidItem);
    public static void WriteNumber1(object i)
    {
        Console.WriteLine("Button 2 " + i.ToString());

    }

     

    ListVoid<int> m1 = new ListVoid<int>(WriteNumber1);
    private void button2_Click(object sender, EventArgs e)
    {
        m1.Invoke(123);

        m1.Invoke(123.45);

        m1.Invoke("12345");
    }

     

     

    不過我認為泛型委派好像不是這樣用的吧,應該是類似於這樣的用法:

     

    程式碼區塊

    //delegate 1
    public delegate void ListVoid<T>(T voidItem);
    public static void WriteNumber1(int i)
    {
        Console.WriteLine("Button 2 " + i.ToString());

    }

    public static void WriteNumber2(double i)
    {
        Console.WriteLine("Button 2 " + i.ToString());

    }

     

    ListVoid<int> m1 = new ListVoid<int>(WriteNumber1);
    private void button2_Click(object sender, EventArgs e)
    {
        m1.Invoke(123);

    }

    ListVoid<int> m2 = new ListVoid<double>(WriteNumber2);
    private void button2_Click(object sender, EventArgs e)
    {

        m2.Invoke(123.45);
    }

     

     

    它只是讓你可以不必為了支援多種資料類型,而寫一堆的委派宣告吧。

    2008年1月16日 上午 02:59
    版主
  • 其實我都好奇MS的示範為什麼會用 泛型委派 給一個 程序

    我估計可能是想限制引數類型,不用boxing和unbox 去增加效能@@?

    我再試試,謝謝回覆

    2008年1月16日 上午 03:08