Мне кажется, я понимаю, чего вы пытаетесь достичь.Из того, что я понимаю, вы хотите использовать делегата для обработки данных в главном классе из AClass.Есть много способов сделать это даже с общими делегатами, но вот один пример:
static void Main(string[] args)
{
AClass aClass = new AClass();
aClass.MessageDelegate = ProcessMessage;
// Send Message (writing of output unnecessary as it happens via the delegate anyway)
Console.WriteLine(aClass.MessageSender(50));
Console.ReadLine();
}
/// <summary>
/// Used as delegate (messages passed from AClass to here)
/// </summary>
/// <param name="mess"></param>
public static void ProcessMessage(String mess)
{
Console.WriteLine("Process message here: " + mess);
}
class AClass
{
public Action<string> MessageDelegate
{ get; set; }
public AClass()
{
}
public String MessageSender(int i)
{
InvokeMessage("Message: " + i);
return "Message: " + i;
}
public void InvokeMessage(String mess)
{
if (MessageDelegate != null)
{
MessageDelegate(mess);
}
}
}
Это соответствует вашему предыдущему делегированию события, так как для него не требуется выходной параметр.В этом основное отличие Action <'Tin> от Func <' Tin, Tout>.Если вы хотите, чтобы ваш метод основного класса возвращал данные обратно вызывающей стороне делегата, тогда вы должны использовать Func.Если я что-то пропустил в ваших требованиях, пожалуйста, дайте мне знать.