代码之家  ›  专栏  ›  技术社区  ›  Jean-Bernard Pellerin

接口上的扩展方法;委托

  •  0
  • Jean-Bernard Pellerin  · 技术社区  · 14 年前

    我试图通过将其中一个父类重新实现为带有扩展方法的接口来绕过C中的双重继承。

    我遇到的问题是

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

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

    我要寻找的是一种变通方法,它允许我在扩展代码中访问接口的事件处理程序。我希望尽可能简单,因为我正在创建的接口类已经被大量的类访问了,这是我最初不情愿进行的更改。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jay    14 年前

    不确定这里的问题是什么——您显示的代码与您引用的错误不匹配(不调用 .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());
        }
    }
    
        2
  •  0
  •   Jean-Bernard Pellerin    14 年前

    我通过以下步骤解决了这个问题:
    接口外部

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

    然后在接口内部

    event EventHandler<EventArgs> Disconnecting;
    

    变成

    MyEventHandler Connected {get; set;}