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

时间:2013-08-27 12:06:20

标签: c# .net vb.net c#-4.0 c#-3.0

为了便于正确地传达问题,我尝试使用常见的东西,以便每个人都可以快速联系,理解并帮助我找到合适的分辨率:)。随时可以直接看一下代码,因为可能理解代码和阅读评论比我的解释更好。让我尝试任何方式。

说,我有碳水化合物代表所有汽车的基础类,如本田,丰田,福特等。)。同样地说,我也有卡车基地。 (所有不同的车辆类别)。另请注意,每辆本田车都有一些共同属性,而这些属性是hondabaseobject所代表的。

现在,我想定义一辆HondaCivic。理想情况下,它将是hondacivic:hondacar,hondabaseobject。

但由于.net不允许多重继承,我正在思考各种方法来建模它。

对象 -

  1. 我想要使用本田基础物体的所有本田车辆,所有带卡车的汽车,所有带卡车底座的卡车等......
  2. 请参阅我提出的以下型号。我很好,但由于某种原因,我不喜欢我定义的界面(IHondaBaseObject)

    我刚刚定义它,以便我可以随身携带所有本田车辆,因为我知道所有本田车辆组成本田基础对象并实施此合同。

    有更好的方法来处理它吗?

    可能有点像HondaCivic:HondaCar - 但处理很困难,因为我不能简单地将HondaCivic转换为HondaBaseObject - 我可以简单地交换类型。希望我能正确地传达这个问题。如果问题本身在反馈的基础上混淆,那么明天就要睡觉的时间 - 明天会尝试进行一些编辑。感谢您的帮助和建议:)


    看起来类似于Multiple inheritance in C#,基本上在c#

    中实现了多重继承

    即。 HondaCivic:CarBase,HondaBaseObject < => HondaCivic:CarBase,IHondabaseObject {         HondaBaseObject Honda; }

       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; }
            }
    

1 个答案:

答案 0 :(得分:2)

  

只是想出了一个假设的例子。请注意每节课   将有自己的特定领域和operatiosn。例如:a   从汽车派生的HondaCar可能会完全超越   引擎工作并有自己的定制部件。

OO开发最佳实践的最新见解是,当类具有不同(或额外)字段/方法时,不使用继承。只有当它们完全可互换时才应使用它们,因此所有类都符合相同的接口。

我建议使用一种带有2种复合物的载体类,ICarBase和类似IIdentifiable的类。

关于利斯科夫替代原则的更多信息:http://davesquared.net/2009/01/introduction-to-solid-principles-of-oo.html

祝你好运。