Методы расширения на интерфейсе;делегаты - PullRequest
0 голосов
/ 21 июня 2010

Я пытаюсь обойти двойное наследование в C # путем повторной реализации одного из родительских классов в качестве интерфейса с методами расширения.

Проблема, с которой я сталкиваюсь, заключается в том, что

event EventHandler<EventArgs> Disconnecting;

public static void OnDisconnected(this AutoConnectClientBase target)
        {
            target.ClientConnectionState = ConnectionState.Disconnected;
            target.Disconnected(target, EventArgs.Empty);
        } 

Невозможно вызвать в методах расширения.Я получаю: ***. Отключение может появиться только на левой стороне + = или - =
Хотя это имеет смысл, в этом случае я бы хотел, чтобы это было не так.

То, что я ищу, - это обходной путь, который позволит мне получить доступ к EventHandlers моего интерфейса в коде расширения.Я хотел бы сделать это как можно более простым, так как класс, который я создаю в интерфейсе, уже доступен большому количеству классов, и это изменение, которое я неохотно делаю в первую очередь.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Не уверен, в чем здесь проблема - код, который вы показываете, не соответствует сообщаемой вами ошибке (нет вызова .Disconnecting.

public interface IInterface
{
    event EventHandler Event;
    EventHandler Handler { get; set; }
}

public class Class : IInterface
{
    public event EventHandler Event;
    public EventHandler Handler { get; set; }

}

public static class InterfaceExtensions
{
    public static void DoSomething(this IInterface i)
    {
        i.Event += (o, e) => Console.WriteLine("Event raised and handled");
        i.Handler(i, new EventArgs());
    }
}
0 голосов
/ 22 июня 2010

Я решил это, выполнив следующее:
За пределами интерфейса

public delegate EventHandler<EventArgs> MyEventHandler(object sender, EventArgs e);

Затем внутри интерфейса

event EventHandler<EventArgs> Disconnecting;

становится

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