我有一组数据结构,例如:
abstract class Base {...}
class Foo : Base {...}
class Bar : Base {...}
同时还需要一种方法,根据所属的子类将其转换为一个基础类型:
void Convert(Base b) {
if (b is Foo)
// Do the Foo conversion
else if (b is Bar)
// Do the Bar conversion
...
显然,这是非常糟糕的面向对象编程 - Convert方法必须知道Base的每个派生类,并且每次扩展Base时都必须更改该方法。解决此问题的“正常”面向对象方式是使每个Base的派生类负责自己的转换,例如:
abstract class Base {
abstract Converted Convert();
...}
class Foo : Base {
override Converted Convert(){...}
...}
class Bar : Base {
override Converted Convert(){...}
...}
然而,在我编写的代码中,Base是一个纯数据结构(只有getter和setter - 没有逻辑),而且它位于另一个我无权更改的程序集中。是否有更好的代码结构方法,不会强制要求Base的派生类具有逻辑呢?
谢谢。
Convert
方法。 - Matthew WatsonFoo
和Bar
实现一个接口,定义所有其他方法可能需要对它们执行的操作;让你的方法接受一个类型为该接口的参数。 - Servy