在我的主要类'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;
}
谢谢,
埃蒙
答案 0 :(得分:10)
当你在类A中声明委托时,你将它声明为类A的子类型。例如,它的类型为ClassA.SendInfo
。在B级你可以使用
public void SetDelegate(ClassA.SendInfo sendinfo)
或者,在类A的代码之外声明委托 - 然后它将只是您可以按名称引用的另一种类型(SendInfo
)。
答案 1 :(得分:10)
为什么要声明具有相同签名的两个单独的委托类型?声明单个委托类型(如果你真的必须 - 尽可能使用Func
和Action
系列)在任何其他类之外,并在任何地方使用它。
你写作时需要注意:
public delegate void SendInfo(string[] info);
确实声明了类型 - 您可以直接在命名空间中声明该类型;它不必是另一种类型的成员。
答案 2 :(得分:5)
只需在命名空间内直接声明代理 ,并在类中 。