Господа, тут следующая проблема :
Есть нетоторый класс Service, который предоставляет метод Call. И есть некоторый класс Proxy, в котором тоже есть метод Call и этот метод должен вызывать Call из класса Service. Для этого, в классе Proxy есть объект-делегат. Все нормально работает, но только этот делегат приходится создавать явно, обращаясь напрямую к члену класса.
Вопрос: Можно ли сделать так, чтобы этот объект создавался в конструкторе при создании экземпляра класса ? Просто более глупые программисты, использующие эти классы, очень часто забывают создавать этот член-делегат, после чего они получают кучу странных ошибок во время выполнения. Если бы можно создавать делегат в конструкторе класса, передавая ему (конструктору) в качестве параметра функцию, которую должен вызывать делегат, то такие ошибки отлавливались бы еще на стадии компиляции.
Привожу пример программки, которая всё это иллюстрирует :
class Proxy
{
public delegate void CallDelegate(string str);
public CallDelegate m_CallProxy; // это тот самый член-делегат :))
public void Call(string str) // это вызов функции-делегата
{
m_CallProxy(str);
}
}
class Service
{
// а это функция, которую нужно вызвать
public void Call(string str)
{
Console.WriteLine("WebServ.str =\"{0}\"",str);
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
Service srv = new Service();
Proxy proxy = new Proxy();
// Член - делегат создается непосредственно !
proxy.m_CallProxy = new CSharpConsoleTestProject.Proxy.CallDelegate(srv.Call);
proxy.Call("Proxy call");
while(true);
}
}
Вопрос — как можно ли сделать что-нибудь, типа Proxy proxy = new Proxy(srv.Call) ?
Если делать напрямую, то C#-компилятор ругается (думает, что
srv.Call — это вызов функции, но без скобок :))
Или методы в качестве параметров можно передавать только в класс System.Delegate ?
Заранее всем спасибо !