对此建模的最佳方法是什么(简单的组合,如策略模式或泛型)?

问题描述 投票:1回答:1

说我有代表所有本田,丰田,福特等汽车基础级的汽车基础。同样,我也有卡车基地(所有不同的车辆类别)。另外请注意,每辆本田汽车都有一些本田对象代表的共同属性。

现在,我想定义一个HondaCivic;理想情况下,它将是hondacivic : hondacar, hondabaseobject,但是由于.net不允许多重继承,因此我正在考虑各种建模方法。

对象-

  1. 我想访问具有本田基础对象的所有本田车辆,具有基础的所有汽车,具有基础的所有卡车...]
  2. 请参阅我提出的以下型号。我可以接受,但是由于某些原因,我不喜欢我定义的接口(IHondaBaseObject)

我刚刚定义了它,以便可以使用它处理所有本田车辆,因为我知道所有本田车辆都构成本田基础对象并执行了此合同。

有更好的方法来处理吗?

可能类似于HondaCivic<HondaBaseObject> : HondaCar-但是处理起来很困难,因为我不能简单地转换HondaCivic<HondaBaseObject> as HondaBaseObject-使用接口可以简单地交换类型。


看起来类似于Multiple inheritance in C#,基本上在c#中实现了多重继承

即HondaCivic:CarBase,HondaBaseObject<=> HondaCivic:CarBase,IHondabaseObject{HondaBaseObject本田;}

   class vehicle
      {
      }
    /// <summary>
        /// Base class for all the cars (common fields and operations of car)
        /// </summary>
        class CarBase : vehicle
        {
            //parts
            virtual steering steering {get;}
            virtual void StartingTheCar(...)

            //engine
        }
        class HondaCar : CarBase
        {
//overrides
//specializations
        }
        class ToyotaCar : CarBase
        {
//overrides
//specializations
        }
        class TruckBase : vehicle
        {
//overrides
//specializations
        }
        class HondaTruck : TruckBase
        {
//overrides
//specializations
        }
        class ToyotaTruck : TruckBase
        {
//overrides
//specializations
        }
        //Is it necessary? - i introduces this so that as i want to access all types of hoda vehicles with a single type
        //but having interface, just for the sake of handling doesnt make sense?
        //i am not sure - but, looks like something is wrong.
        interface IHondaBaseObject
        {
        }
        /// <summary>
        /// Object which contains the common attributes for each honda vehicle (say cars, suvs, trucks, bikes etc...)
        /// </summary>
        class HondaBaseObject 
            : IHondaBaseObject
        {
            string identity { get; set; }
            public override bool Equals(object obj)
            {
                return base.Equals(obj);
            }
            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }
        //Now what is the best way to model it? should i use generics? or just a simple stragey pattern?
        class HondaCivic : HondaCar, IHondaBaseObject
        {
            HondaCivic(HondaBaseObject ho)
            {
            }
            public HondaBaseObject { get; }
        }

说我有代表所有本田,丰田,福特等汽车基础级的汽车基础。同样,我也有卡车基地(所有不同的车辆类别)。另外请注意,每个...

c# .net vb.net c#-4.0 c#-3.0
1个回答
2
投票

只是想出一个假设的例子。请注意,每节课将有自己指定的字段和操作。例如:源自汽车的HondaCar可能会完全取代引擎正常工作,并具有自己的自定义零件。

© www.soinside.com 2019 - 2024. All rights reserved.