为了便于正确地传达问题,我尝试使用常见的东西,以便每个人都可以快速联系,理解并帮助我找到合适的分辨率:)。随时可以直接看一下代码,因为可能理解代码和阅读评论比我的解释更好。让我尝试任何方式。
说,我有碳水化合物代表所有汽车的基础类,如本田,丰田,福特等。)。同样地说,我也有卡车基地。 (所有不同的车辆类别)。另请注意,每辆本田车都有一些共同属性,而这些属性是hondabaseobject所代表的。
现在,我想定义一辆HondaCivic。理想情况下,它将是hondacivic:hondacar,hondabaseobject。
但由于.net不允许多重继承,我正在思考各种方法来建模它。
对象 -
请参阅我提出的以下型号。我很好,但由于某种原因,我不喜欢我定义的界面(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; }
}
答案 0 :(得分:2)
只是想出了一个假设的例子。请注意每节课 将有自己的特定领域和operatiosn。例如:a 从汽车派生的HondaCar可能会完全超越 引擎工作并有自己的定制部件。
OO开发最佳实践的最新见解是,当类具有不同(或额外)字段/方法时,不使用继承。只有当它们完全可互换时才应使用它们,因此所有类都符合相同的接口。
我建议使用一种带有2种复合物的载体类,ICarBase和类似IIdentifiable的类。
关于利斯科夫替代原则的更多信息:http://davesquared.net/2009/01/introduction-to-solid-principles-of-oo.html
祝你好运。