接口上的扩展方法;代表

时间:2010-06-21 19:33:12

标签: c# interface delegates extension-methods event-handling

我试图通过重新实现其中一个父类作为扩展方法的接口来解决C#中的双重继承问题。

我遇到的问题是

event EventHandler<EventArgs> Disconnecting;

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

无法在扩展方法中调用。 我得到:***。断开连接只能出现在+ =或 - =
的左侧 虽然这很有道理,但在这种情况下我希望不是这样。

我正在寻找的是一种解决方法,允许我在扩展代码中访问我的界面的EventHandlers。我想保持它尽可能简单,因为我正在进入一个接口的类已经被很多类访问了,这是我一开始不情愿地做出的改变。

2 个答案:

答案 0 :(得分:1)

不确定此处出现的问题 - 您显示的代码与您引用的错误不符(无法拨打.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());
    }
}

答案 1 :(得分:0)

我通过以下方式解决了这个问题:
在界面之外

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

然后在界面

event EventHandler<EventArgs> Disconnecting;

变为

MyEventHandler Connected {get; set;}