基类:
public class EngineParts { public string name; public int ID; public GameObject Mesh; public Vector3 position; public Quaternion Rotation; public string Description; public float new_value; // the brand new price of it}
然后我会有从它继承的类:
public class Rods : EngineParts { }public class Pistons : EngineParts { public float Size=51; public float Compression=51; }public class Turbo : EngineParts { public float maxboostpressure; public float minboostpressure; public float MaxOperatingRPM; public float MinoperatingRPM; public float AirToEngineRatio; public float wasteGatePressure; }
这里的导入是所有汽车零件共享基类中的一些常见值,这些值是名称,ID,网格,位置,旋转等.
它们还具有其他更适合零件本身的值,例如Turbo具有maxboostpressure,它决定了涡轮增压器可以承受的最大增压压力.
现在在实际游戏中,我需要能够将这些部分用作一个集合
public EngineParts[] Part = new EngineParts[3];Part[0] = new Rods();Part[1] = new Pistons();Part[2] = new Turbo();
因此,我可以在需要时遍历所有部件,因为它们都是EngineParts类型.
但是当试图为max maxboostpressure分配一个值时,我无法做到这一点.
//Note: Part[1] here is pistons Part[1].name = "SportPiston"; // this will work since it is type of EngineParts Part[1].maxboostpressure = 5.0; // this will not work
这是因为它是EngineParts类型
但我可以说:
Rods rd = new Rods();Pistons pt = new Pistons();Turbo tb = new Turbo();pt.name = 5; // this will workpt.maxboostpressure = 5; // this will work
现在他们确实从Base类共享相同的DAta,但是我不能将Rods,Pistons,Turbo放在一个集合中来循环或传递它们在一个适用于所有这些的函数中.
所以
问题在这里
我怎么能做到最好呢?
1-将发动机的所有部件放在一个集合/列表中
2-能够以最少的编码在每种类型的零件上存储额外的数据.
我一直在读书
抽象类,重载,多态和继承来解决这个问题,但仍然有一些我必须忽略的东西,所以如果有人能指出我正确的方向,我将非常感激.
先感谢您
解决方法 试试像这样的演员:Piston p = Part[1] as Piston;
如果Part [1]不是Piston,p将为null.
然后继续
if(p!=null) doSomethingHere;总结
以上是内存溢出为你收集整理的c# – 如何创建类的(多态)集合/列表/数组,其中每个类可能具有一些不同的属性全部内容,希望文章能够帮你解决c# – 如何创建类的(多态)集合/列表/数组,其中每个类可能具有一些不同的属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)