5
|
Chathuranga Chandrasekara · 技术社区 · 14 年前 |
![]() |
1
8
您可以在这里使用通用接口。一个例子:
|
![]() |
2
3
如果你能稍微改变一下你的设计,仿制药将对你有所帮助:
这并不完全符合您的示例,但非常接近。如果您不能进行这种更改,那么我会说您的类没有足够的相似性,以至于它们没有一个公共接口是有意义的。 您还应该注意到,这种设计非常类似于IDicotory或iLookup接口。也许您可以使用现有的接口,而不是创建一个新的接口。 |
![]() |
3
1
|
![]() |
4
0
我认为这些接口没有问题。但是,如果在同一个类中实现这两个接口,我确实会看到一个问题。这样做会打破单一责任原则。 阅读更多信息: http://www.objectmentor.com/resources/articles/srp.pdf 你也可以阅读这本关于一些设计原则的好书: http://cdn.cloudfiles.mosso.com/c82752/pablos_solid_ebook.pdf |
![]() |
5
0
这个问题定义得很明确,但根据我的理解,你有几种可能性 首先使用泛型方法定义
并在通用接口中定义它(如果是抽象类,则为抽象类) 否则,一个非常古老但仍然完好的技术就是方法重载。可以使用相同的名称定义多个方法,但使用不同的参数。.NET在streamreader、toString等类中大量使用此模式 从您提供的签名来看,您可能会发现它的用途。 第三种选择(尽管更难编码)是使用lambda表达式。
通过这种方式,您可以定义一个通用的添加操作,然后将其封装到对象中。我提供的签名很容易更改。另外,您可能不希望立即执行该操作,而是将其安排为延迟执行,或者异步执行。lambda表达式的可能性是无限的。 另外,我还提供了一个使用操作委托的实现。您可以很容易地将此代码转换为使用表达式类,通过该类,您可以在代码执行期间构建自己的委托(并在初始化之后缓存它们,因为这是一个相当慢的过程,即反射和其他东西)。我强烈建议尽可能滥用委托和表达式。 当心 乌卡斯 |