我有一系列数据结构,例如:
abstract class Base {...}
class Foo : Base {...}
class Bar : Base {...}
和一个方法,它接受一个 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 的派生类具有逻辑的代码的方法?
谢谢