如何以编程方式将两个不同的类分配给一个变量?

时间:2019-03-27 18:47:57

标签: c# oop unity3d

我正在Unity中创建一个游戏,我有2个类,我想根据布尔值为该变量分配2个不同的类,以便以后按自己的意愿使用该类,这是到目前为止的代码给出想法,我正在寻找什么,甚至有可能完成?谢谢

public GeneticController geneticController;
public GeneticDriver geneticDriver;

public Object Genetic;

void Start() {
    if (RaceSelect.SelectedRace == 2) {
        Genetic = geneticDriver;
    } else {
        Genetic = geneticController;
    }

}

void FixedUpdate() {
    float steer = (float)(Genetic.Steering);
    Steering(steer);     

}


此刻,它只是说Object没有一个名为“ Steering”的变量。遗传应该是哪种类型?

2 个答案:

答案 0 :(得分:1)

我在这里假设GeneticControllerGeneticDriver都实现了Steering属性?如果是这样,特别是如果它们具有其他共同的属性和方法,则实现此目标的正确方法是重构这些类,以便它们共享一个公共接口。

public interface ISteering
{
    float Steering {get; set;}
}
public class GeneticController : ISteering
{
    public float Steering{ get; set; }
}
public class GeneticDriver: ISteering
{
    public float Steering{ get; set; }
}

为此,您可以将变量Genetic设置为ISteering类型。

public ISteering Genetic;

但是,如果“转向”是它们唯一的共同点,那么我建议您重新考虑一下总体设计。如果这两个类不共享或很少共享通用函数,则它们可能不需要共享变量。

答案 1 :(得分:0)

您是否尝试过使用派生到您的2个子类中的基类?

类似的东西:

public class BaseClass
{
  public float Steering {get;set;}
}

public class GeneticController : BaseClass
{
}

public class GeneticDriver : BaseClass
{
}

然后您执行以下操作(并且不需要强制转换):

BaseClass Genetic

void Start()
{
  if (RaceSelect.SelectedRace == 2)
  {
    Genetic = geneticDriver;
  } else
  {
    Genetic = geneticController;
  }
}

void FixedUpdate()
{
  float steer = Genetic.Steering;
  Steering(steer);     
}

您也可以将BaseClass设置为接口。这取决于两个派生类之间是否具有通用功能。