C#创建一个从继承类构造的类

时间:2011-04-24 21:06:55

标签: c# inheritance

我有一个班级:

class Cube
{
   public string Name;
   public string TexturePath;
}

另一个继承Cube

的类
class DrawableCube : Cube
{
   public Texture2D Texture;
   public Shader Shader;
}

假设我有Cube的集合,我想将其转变为DrawableCube。如果不创建一个构造函数,将Cube作为参数并复制所有属性,我如何制作Cube的结果类型为DrawableCube的副本?

4 个答案:

答案 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)

由于你不想要一个构造函数,我想唯一的另一个选择就是工厂模式。