是否可以在 C# 中更改对象类型

use*_*486 3 .net c# types object

为了满足客户的要求,我遇到了一些问题。

我会尽量让这个例子非常简单,只是给出一个问题的想法,并希望提出一个解决方案。

在这一点上,我们有一个类“形状”,例如,形状有一些特化,它可以是正方形、三角形等。

到目前为止一切顺利,一切都很好。

现在出于某种原因,我的客户想要将系统中已经存在的正方形更改为三角形,但要保留所有数据的形状。

那可能吗?任何解决方法?

Dan*_*ner 5

您不能更改对象的运行时类型。只需创建一个新三角形,复制所有相关值并丢弃正方形。如果正方形已经被许多其他对象引用,这当然会变得棘手,因为您必须更新所有引用。

如果替换对象不是一种选择,您可能必须想出一个可以充当任何类型形状的通用形状类。例如,此类可以是围绕其中一个具体形状类的实例的薄包装器。这使您只需用新三角形替换包装的正方形,而外部世界可以保留对包装类的所有引用。

  • 这归结为:使用组合而不是继承。包装类将由一个形状组成,可以在运行时设置和更新,改变包装类的*角色*。组成=灵活性。 (3认同)