4

我有一个名为的接口IStructuredReader,它从文件中读取一些结构化数据并将其显示在表单中。它有一个名为的成员Sync(),当实现时,它会扫描数据以查找用户指定的数据模式。

一些实现IStructuredReader没有同步功能。这些实现会抛出NotImplementedExceptionSync()方法。我希望能够检查此方法是否正在实施,以便如果没有,我可以使表单上的按钮变暗。

我可以想到很多方法可以做到这一点,所有这些都显得笨拙和复杂:

  1. 将方法分离Sync到自己的接口中,为那些支持能力的实现继承它,并尝试将读取器对象强制转换为它以识别能力,

  2. 编写一个NotImplementedAttribute,用它装饰成员,并使用反射检查属性是否存在,

  3. 向接口添加一个HasSyncCapability布尔属性。

有没有一种规范的方式来做到这一点?

4

2 回答 2

6

这听起来像你真的应该有两个接口。您的Sync()方法显然是在基本接口上添加功能,这表明这确实是一个单独的问题,因为它不是IStructuredReader. 我建议为支持此功能的类型添加第二个接口,以便在您的视图层中轻松检查。

于 2013-01-16T18:51:40.557 回答
2

规范的方法是让接口公开将要实现的方法,所以我看到的最干净的解决方案是创建另一个可能Syncronizable只使用该方法调用的接口。如果您的对象实现了该接口,您就知道该方法在那里,这一点也不笨拙。使用反射或额外属性确实不如解决方案干净,但这并不意味着如果它能让你的生活更轻松,你就不应该去使用它们;)

于 2013-01-16T18:52:15.490 回答