我有两个界面(一个用于订阅者,一个用于发布者):
对于允许举起活动的客户
,第一个应该是可见的 public interface IClientLogicEvents
{
IRaiseEvent<CallStateChangedEventArgs> CallStateChanged { get; }
}
对订阅和处理这些事件的客户来说,第二个应该是可见的
public interface IHandleOnlyClientLogicEvents : IClientLogicEvents
{
ISubscribeEvent<CallStateChangedEventArgs> CallStateChanged { get; }
}
Event接口看起来像这样
public interface ISubscribeEvent<out TEventArgs> where TEventArgs : EventArgs
{
void Subscribe(Action<object, TEventArgs> handler);
void Unsubscribe(Action<object, TEventArgs> handler);
}
public interface IRaiseEvent<TEventArgs> : ISubscribeEvent<TEventArgs> where TEventArgs : EventArgs
{
void Raise(object sender, TEventArgs args);
}
现在我想要一个实现这两个接口的类(IClientLogicEvents和IHandleOnlyClientLogicEvents)。
像这样:
public sealed class ClientLogicEvents : IClientLogicEvents, IHandleOnlyClientLogicEvents
或:
public sealed class ClientLogicEvents : IHandleOnlyClientLogicEvents
问题现在当然是我需要实现两次属性(对于每个接口),这需要额外的字段来存储它。
public sealed class ClientLogicEvents : IClientLogicEvents, IHandleOnlyClientLogicEvents, IDisposable
{
/// <summary>
/// The internal call state changed event.
/// </summary>
private readonly CustomEvent<CallStateChangedEventArgs> _callStateChangedEvent;
public ClientLogicEvents()
{
_callStateChangedEvent = new CustomEvent<CallStateChangedEventArgs>();
}
/// <summary>
/// Gets the invokeable call state changed event.
/// </summary>
IRaiseEvent<CallStateChangedEventArgs> IClientLogicEvents.CallStateChanged { get { return _callStateChangedEvent; } }
/// <summary>
/// Gets the subscribe only call state changed event.
/// </summary>
ISubscribeEvent<CallStateChangedEventArgs> IHandleOnlyClientLogicEvents.CallStateChanged { get { return _callStateChangedEvent; } }
}
但是我想为属性实现保存这么多代码(因为我有200个事件)。 这有可能以某种方式。我只有像
这样的东西 public sealed class ClientLogicEvents : IClientLogicEvents, IHandleOnlyClientLogicEvents, IDisposable
{
/// <summary>
/// Gets the invokeable call state changed event.
/// </summary>
public IRaiseEvent<CallStateChangedEventArgs> CallStateChanged { get; private set; }
}
答案 0 :(得分:1)
您不能拥有一个满足两个接口约束的属性,因为单个属性不能同时具有两种类型(IRaiseEvent<CallStateChangedEventArgs>
和ISubscribeEvent<CallStateChangedEventArgs>
)。
问题底部的示例未实现IHandleOnlyClientLogicEvents
界面。