我有以下课程:
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':预期的接口名称
当我研究这个时,我试图构建一个接口 - 但后来发现很短,因为我不能理解这一点.能帮助我理解这一点,还是指点一篇好文章的方向来帮助我这样做?
我试图在我的一个项目中继承它,但是我已经在那里继承了另一个类
这是编译器告诉你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)