在面向对象设计方面,你有多深入了Has-a?

时间:2010-03-10 18:58:43

标签: c# oop

如果我说汽车有一定数量的轮胎,轮胎尺寸,轮胎品牌,那么我猜我可以上这样的课:

public class Car
{
    public int TireCount {get;set;}
    public float TireSize {get;set;}
    public string TireBrand {get;set;}
}

另一方面,我可以让Tire成为一个类,然后将其作为Car类的属性:

public class Tire
{
   public int Count {get;set;}
   public float Size {get;set;}
   public string Brand {get;set;}
}

public class Car
{
    public Tire tire {get;set;}
}

更好的方法是什么?我有多深的关系?是否有可能超过对象,如果有这样说?

3 个答案:

答案 0 :(得分:3)

尽可能深入了解申请。

在您的示例中,您的Car类将具有与轮胎相关的多个属性...因此Tire类(或Tire的集合)是有意义的。可能类似于:

public class Tire
{
    public float Size {get; set;}
    public string Brand {get; set;}
}

public class Car
{
    public List<Tire> Tires {get; private set;}
}

然后你可以这样做:

Car myCar = new Car();

// Some initialization here

int tireCount = myCar.Tires.Count();

获得轮胎数量。

答案 1 :(得分:2)

就个人而言,我会让“尺寸”和“品牌”成为推杆的成员,因为它们特定于特定类型的轮胎。

另一方面,汽车应该有一系列轮胎,因为你可以(理论上)有多种不同类型的轮胎。

我会更喜欢这样做:

public class Tire
{
    public float Size {get;set;}
    public string Brand {get;set;}
}

public class Car
{
    public IList<Tire> Tires {get; private set;}
}

答案 2 :(得分:1)

我会去,直到我确定我不必复制信息

在这种情况下,我可能只需要一个轮胎实例