我有一个名为IStructuredReader
的接口,它从文件中读取一些结构化数据并以表格形式显示。它有一个名为Sync()
的成员,在实现时会扫描数据以获取用户指定的数据模式。
IStructuredReader
的某些实现没有同步功能。这些实现为NotImplementedException
方法抛出Sync()
。我希望能够检查这个方法是否正在实现,这样我就可以将窗体上的按钮调暗,如果不是的话。
我可以想到一些可以做到这一点的方法,所有这些方法看起来都很笨拙和复杂:
将Sync
方法分离到自己的接口中,为那些支持该功能的实现继承它,并尝试将reader对象强制转换为它以识别该功能,
写一个NotImplementedAttribute
,用它装饰成员,并使用Reflection检查属性的存在,
在界面中添加HasSyncCapability
布尔属性。
这是否有规范的方法?
答案 0 :(得分:6)
这听起来你真的应该有两个接口。您的Sync()
方法显然在基础界面上添加了功能,这表明这实际上是一个单独的问题,因为它不是IStructuredReader
的要求。我建议为支持此类型的类型添加第二个接口,然后在视图层中轻松检查。
答案 1 :(得分:2)
规范的方法是让接口公开将要实现的方法,因此我看到的最简洁的解决方案是使用该方法创建另一个名为maybe Syncronizable
的接口。如果你的对象实现了那个接口你知道方法就在那里,这根本就不笨拙。使用反射或额外属性确实不如解决方案那么干净,但这并不意味着如果它让你的生活更轻松就不应该去那些;)