【问题标题】:How to pass a delegate to another class如何将委托传递给另一个类
【发布时间】:2011-03-31 15:57:21
【问题描述】:

在我的主类“A”中,我声明了一个函数并委托调用该函数,我想将我的委托传递给另一个类“B”,但 B 类如何知道委托的类型?

A级

public delegate void SendInfo(string[] info);
SendInfo sendInfo = new SendInfo(SendInformation); //I have a function SendInformation

B b = new B();
b.SetDelegate(sendInfo);

B类

public delegate void SendInfo(string[] info); //I know this is wrong but how will 
SendInfo SendInformation;                     //this class know what SendInfo is?

public void SetDelegate(SendInfo sendinfo)    //What type is this parameter?
{
    sendinfo.GetType();
    SendInformation = sendinfo;
}

谢谢,

埃蒙

【问题讨论】:

    标签: c# delegates


    【解决方案1】:

    当您在 A 类中声明委托时,您将其声明为 A 类的子类型。例如,它的类型为 ClassA.SendInfo。在 B 类你可以使用

    public void SetDelegate(ClassA.SendInfo sendinfo)
    

    或者,在 A 类的代码之外声明委托 - 然后它将只是您可以通过名称引用的另一种类型 (SendInfo)。

    【讨论】:

      【解决方案2】:

      为什么要声明两个具有相同签名的独立委托类型?在任何其他类之外声明一个单个委托类型(如果你真的必须 - 尽可能使用 FuncAction 系列),并在任何地方使用它。

      你在写的时候需要注意:

      public delegate void SendInfo(string[] info);
      

      这确实是在声明一个 type - 您可以直接在命名空间中声明该类型;它不必是其他类型的成员。

      【讨论】:

      • 就像 Jon 提到的那样,Action 将是一个很好的类型,用于代表而不是定义一个新的类型。
      【解决方案3】:

      只需在您的命名空间中直接声明委托一次,而不是在类中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-01
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        相关资源
        最近更新 更多