将.net对象的类更改为子类

时间:2012-12-09 18:30:15

标签: .net oop design-patterns

我有一个OO设计问题。

我正在使用Factory模式来创建适合于我传递Factory的参数的类的对象。但是,有一些属性我只能在创建对象后获得,然后我想用它来进一步子类化或“特化”对象的类型。

我需要使用polimorphism的子类来为具有附加输入参数的对象使用自定义逻辑。

我认为这是一些设计模式“运行时重新确定对象类”。我该如何实现它?哦,可能是不好的做法?

2 个答案:

答案 0 :(得分:2)

您无法在运行时更改对象类型。如果你有基类的实例,那么它将保留基类类型。但是您可以在运行时创建新对象。使用组合而不是继承。

即。而不是从基类继承,创建另一个对象层次结构 - 提取到新类(不是从基类继承)代码,这些代码在创建基础对象后发生更改。这可能是一些策略。然后在运行时为您的基础对象提供不同的策略实现(即“specialize”基类实例)。

答案 1 :(得分:0)

无法更改实例化对象的类型,但我看到了两种可能的解决方法:
1.从您的初始工厂实例化另一个工厂,最终将创建所需类型的对象 2.利用Ruby的“方法缺失”概念和ExpandoObject。我不确定它是否适合你的情况。