期望的接口名称 - 但我不明白如何实现它

Mic*_*l A 4 c# interface

我有以下课程:

public abstract class CommonEvents : DisposableObject
{
    /// <summary>
    /// Internal method for storing error messages to our event
    /// </summary>
    /// <param name="message"></param>
    /// <param name="showException"></param>
    /// <param name="exception"></param>
    public void OnError(string message, OnErrorEventsArgs.ShowExceptionLevel showException, Exception exception)
    {
        if (_onErrorEvent == null) return;

        var e = new OnErrorEventsArgs(message, showException, exception);

        _onErrorEvent(this, e);
    }

    /// <summary>
    /// Internal event handler allowing for logging of events within the class
    /// </summary>
    private EventHandler<OnErrorEventsArgs> _onErrorEvent;

    /// <summary>
    /// Public event handler allowing for accessibility outside of the class
    /// </summary>
    public event EventHandler<OnErrorEventsArgs> OnErrorEvent
    {
        add { _onErrorEvent += value; }
        remove { _onErrorEvent += value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图在我的一个项目中继承它,但是我已经在那里继承了另一个类,代码如下:

public class ItemDal : Common.Dal.BaseDal, CommonEvents
{
Run Code Online (Sandbox Code Playgroud)

我收到的错误是

'CommonEvents':预期的接口名称

当我研究这个时,我试图构建一个接口 - 但后来发现很短,因为我不能理解这一点.能帮助我理解这一点,还是指点一篇好文章的方向来帮助我这样做?

das*_*ght 6

我试图在我的一个项目中继承它,但是我已经在那里继承了另一个类

这是编译器告诉你C#不支持多重继承的方式.如果将类放在基数列表中,则其余名称必须引用接口.

只有当其中一个类直接或间接地继承另一个类时,才能继承它们.这样你就可以继承最派生的类,以及恰好是它的基础的另一个类.

C#中的一个常见解决方案是从其中一个类中提取接口,嵌入实现的实例,并通过组合将接口调用转发到类中包含的实现.

在你的情况下,它看起来像这样:

interface ICommonEvents {
    void OnError(string message, OnErrorEventsArgs.ShowExceptionLevel showException, Exception exception);
    event EventHandler<OnErrorEventsArgs> OnErrorEvent {add;remove;}
}
// Keep the implementation the same
public class CommonEvents : DisposanbleObject, ICommonEvents {
    ...
}
// Here is your derived class:
public class ItemDal : Common.Dal.BaseDal, ICommonEvents {
    private readonly CommonEvents ce = ... // Initialize your common events
    void OnError(string message, OnErrorEventsArgs.ShowExceptionLevel showException, Exception exception) {
        ce.OnError(message, showException, exception);
    }
    event EventHandler<OnErrorEventsArgs> OnErrorEvent {
        add {ce.OnErrorEvent += value;}
        remove {ce.OnErrorEvent -= value;}
    }
}
Run Code Online (Sandbox Code Playgroud)