我有一个班级:
class Cube
{
public string Name;
public string TexturePath;
}
另一个继承Cube
class DrawableCube : Cube
{
public Texture2D Texture;
public Shader Shader;
}
假设我有Cube
的集合,我想将其转变为DrawableCube
。如果不创建一个构造函数,将Cube
作为参数并复制所有属性,我如何制作Cube
的结果类型为DrawableCube
的副本?
答案 0 :(得分:6)
恕我直言,这里最好的解决方案是不要从DrawableCube
继承Cube
,而是让UI类DrawableCube
保留对数据类Cube
的内部引用。但是,Cube
应该设计为immutable class。这种方式DrawableCube
需要构造函数采用Cube
,但您不必复制所有属性,只需存储给定的引用:
class DrawableCube :
{
private myCube;
public DrawableCube(Cube c)
{
myCube=c;
}
}
答案 1 :(得分:1)
警告:以下解决方案很难看,但它可以满足您的需求。
让Cube
在其构造函数中获取类型CubeInformation
的单个参数,这是它唯一的成员(它是私有的)。它只是设置CubeInformation
。然后它为该结构中的东西提供属性。
让CubeInformation
成为包含Cube
的数据的结构。
让DrawableCube
有一个带Cube
的构造函数,并复制CubeInformation
的{{1}}结构。
Wallah。如果有人必须向Cube
添加更多数据,他们会将其添加到Cube
结构中并实现CubeInformation
中的属性。 Cube
无需维护。
答案 2 :(得分:1)
如果您想将Cube
的集合转换为DrawableCube
的集合,那么继承可能不是正确的工具。
尝试聚合:
class DrawableCube //: Cube
{
public Cube TheCube { get; private set; }
public DrawableCube (Cube c) { TheCube = c; }
public Texture2D Texture;
public Shader Shader;
}
答案 3 :(得分:0)
由于你不想要一个构造函数,我想唯一的另一个选择就是工厂模式。