【问题标题】:Is it possible to change an object's (inherited) class after instantiated实例化后是否可以更改对象的(继承的)类
【发布时间】:2020-01-29 15:12:06
【问题描述】:

我有一个类(例如,Vehicle),我还有一些其他类继承它(Car Inherits Vehicle;Truck Inherits Vehicle;等等) 在实例化对象之前,我不会知道继承类是什么。继承后可以更改类吗?例如,我是否可以实例化一个 Vehicle,执行一些逻辑来确定它是 Car 还是 Truck,然后将 Car 或 Truck 类应用于它?

目前我必须预先查询以找出它是什么类型的车辆,然后使用开关/案例来实例化适当的类。如果可能的话,我想缩小它并消除预查询;似乎应该有更好的方法来做到这一点。

任何意见或建议将不胜感激。我可以使用 PHP 或 C# 构建。

【问题讨论】:

  • 您能否详细说明为什么在实例化对象之前您不知道继承类是什么?感觉就像你有某种“VehicleBaseData”和一些逻辑(在继承类中?或者可能是 Vehicle 类?)来决定,哪个继承类最合适。因此,与其直接尝试实例化Vehicle,不如创建一个具有该决策逻辑的工厂,然后实例化一个VehicleBaseData,并将其交给工厂以接收正确继承类的实例?

标签: c# php oop


【解决方案1】:

您可以引用 Base (Vehicle) 类,但在实例化时应该知道实际类型。如果需要,您可以使用基类引用进一步引用该实际类型。 示例(c#):

Vehicle myFactory(int type)
{
    Vehicle v = null;
    switch(type)
    {
    case 0:
       v = new Car();
       break;
    case 1:
       v = new Truck();
       break;
    }
    return v;
}

【讨论】:

  • 这看起来很像然后在原始问题中使用 switch/case 来实例化适当的类
猜你喜欢
  • 1970-01-01
  • 2014-09-09
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多