【发布时间】:2010-11-13 15:12:31
【问题描述】:
是否可以定义具有可选实现方法的接口?例如,我的核心库中有以下接口定义为 IDataReader:
public interface IDataReader<T> {
void StartRead(T data);
void Stop();
}
但是,在我当前的实现中,Stop() 方法从未被使用或实现过。在我所有的实现类中,这个方法必须默认使用 throw NotImplementedExcetion() 来实现:
class MyDataReader : IDataReader<MyData> {
...
public void Stop()
{
// this none implementaion looks like uncompleted codes
throw NotImplementedException();
}
当然,我可以把抛出异常代码去掉,留空。
当我设计这个数据阅读器界面时,我认为它应该提供一种停止阅读过程的方法。也许我们将来某个时候会使用 Stop()。
无论如何,不确定是否可以将这个 Stop() 方法作为可选的实现方法?我能想到的唯一方法是定义两个接口,一个带停止,另一个不带 IDataReader 和 IDataReader2。另一种选择是将其分解为如下接口:
interface IDataReader<T> {
void StartRead(T data);
}
interface IStop {
void Stop();
}
在我的实现案例中,我必须强制转换或用作 Istop 来检查我的实现是否支持 Stop() 方法:
reader.StartRead(myData);
....
// some where when I need to stop reader
IStop stoppable = reader as IStop;
if (stoppable != null ) stoppable.Stop();
...
我仍然必须编写这些代码。有什么建议?不确定是否有任何方法可以在 .Net 或 C# 的接口中定义可选的实现方法?
【问题讨论】: