举例讲解C#编程中委托的实例化使用

2019-12-30 11:35:15王振洲
易采站长站为您分析C#编程中委托的实例化使用,包括委托的声明和多播委托的创建等内容,需要的朋友可以参考下  

合并委托
本示例演示如何创建多播委托。 委托对象的一个有用属性是:可以使用 + 运算符将多个对象分配给一个委托实例。多播委托包含已分配委托的列表。在调用多播委托时,它会按顺序调用列表中的委托。只能合并相同类型的委托。
- 运算符可用于从多播委托中移除组件委托。


using System;

// Define a custom delegate that has a string parameter and returns void.
delegate void CustomDel(string s);

class TestClass
{
  // Define two methods that have the same signature as CustomDel.
  static void Hello(string s)
  {
    System.Console.WriteLine(" Hello, {0}!", s);
  }

  static void Goodbye(string s)
  {
    System.Console.WriteLine(" Goodbye, {0}!", s);
  }

  static void Main()
  {
    // Declare instances of the custom delegate.
    CustomDel hiDel, byeDel, multiDel, multiMinusHiDel;

    // In this example, you can omit the custom delegate if you 
    // want to and use Action<string> instead.
    //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;

    // Create the delegate object hiDel that references the
    // method Hello.
    hiDel = Hello;

    // Create the delegate object byeDel that references the
    // method Goodbye.
    byeDel = Goodbye;

    // The two delegates, hiDel and byeDel, are combined to 
    // form multiDel. 
    multiDel = hiDel + byeDel;

    // Remove hiDel from the multicast delegate, leaving byeDel,
    // which calls only the method Goodbye.
    multiMinusHiDel = multiDel - hiDel;

    Console.WriteLine("Invoking delegate hiDel:");
    hiDel("A");
    Console.WriteLine("Invoking delegate byeDel:");
    byeDel("B");
    Console.WriteLine("Invoking delegate multiDel:");
    multiDel("C");
    Console.WriteLine("Invoking delegate multiMinusHiDel:");
    multiMinusHiDel("D");
  }
}

输出:


Invoking delegate hiDel:
 Hello, A!
Invoking delegate byeDel:
 Goodbye, B!
Invoking delegate multiDel:
 Hello, C!
 Goodbye, C!
Invoking delegate multiMinusHiDel:
 Goodbye, D!


声明、实例化和使用委托
在 C# 1.0 及更高版本中,可以按以下示例所示声明委托。


 


 // Declare a delegate.
delegate void Del(string str);

// Declare a method with the same signature as the delegate.
static void Notify(string name)
{
  Console.WriteLine("Notification received for: {0}", name);
}


 // Create an instance of the delegate.
Del del1 = new Del(Notify);