Как передать делегата другому классу - PullRequest
7 голосов
/ 31 марта 2011

В моем основном классе «A» я объявил функцию и делегат для вызова этой функции, я хочу передать свой делегат другому классу «B», но как класс B узнает, какой тип делегата?

класс А

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

Спасибо

Имон

Ответы [ 3 ]

10 голосов
/ 31 марта 2011

Почему вы объявляете два разных типа делегатов с одинаковой подписью? Объявите одиночный тип делегата (если вам действительно нужно - используйте семейства Func и Action, где это возможно) вне любых других классов и используйте его везде.

Вы должны знать, что когда вы пишете:

public delegate void SendInfo(string[] info);

, который действительно объявляет тип - и вы можете объявить этот тип непосредственно в пространстве имен; он не обязательно должен быть членом другого типа.

10 голосов
/ 31 марта 2011

Когда вы объявляете делегата «в» классе A, вы объявляете его как подтип класса A. Так, например, он имеет тип ClassA.SendInfo.В классе B вы можете использовать

public void SetDelegate(ClassA.SendInfo sendinfo)

В качестве альтернативы, объявите делегат вне кода для класса A - тогда это будет просто другой тип, на который вы можете ссылаться по имени (SendInfo).

5 голосов
/ 31 марта 2011

Просто объявите делегата один раз непосредственно в вашем пространстве имен и не внутри класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...