c#抽象类

时间:2011-04-27 01:18:00

标签: c# class abstract-class

我必须创建一个虚假的DMV程序来计算商用和私人车辆的年费。这两个类将是抽象的,它们将来自名为所有车辆的类的多态性。

我的教练只希望一个对象创建整个程序(在main中),但由于我的前三层类是抽象的。我不能用它们创建一个物体,即vehicle = new vehicles();

所以我的问题是我如何只创建一个对象,因为它们是抽象的?如果您有任何问题可以随意提问,我可能没有解释清楚......

4 个答案:

答案 0 :(得分:0)

你似乎有点困惑。 “所有车辆”应该是抽象的。 “商用车”和“私人车辆”不应该是抽象的,除非有这两者的具体子类。

你也可能无法通过“只有一个对象”理解你的教师的意思,因为这没有意义。

答案 1 :(得分:0)

也许你要制作一个代表DMV的对象,但该对象的定义包括其他对象的实例。

class DMV {
 private List<Vehicle> vehicles = new List<Vehicle>();
 ...
}

答案 2 :(得分:0)

您的教师可能希望您通过对抽象基类的引用来实例化多个对象:

Vehicle conveyance;
conveyance = new PrivateVehcicle();
conveyance.Drive();
conveyance.Stop();
// or whatever ...
conveyance = new CommercialVehcicle();
conveyance.Drive();
conveyance.Stop();

即。你有一个单一的对象引用(传递),它根据你实例化的具体类型而多态化。

答案 3 :(得分:0)

您的课程结构如下所示:

abstract class Vehicle
{
    protected abstract int BaseFee { get; }
    protected abstract int ExtraFee { get; }

    public int CalculateFee()
    {
        return BaseFee + ExtraFee;
    }
}

abstract class CommercialVehicle : Vehicle
{
    protected override int BaseFee
    {
        return 100;
    }
}

class LightDutyTruck : CommercialVehicle
{
    protected override int ExtraFee
    {
        return 50;
    }
}

class Semi : CommercialVehicle
{
    protected override int ExtraFee
    {
        return 150;
    }
}

[etc...]

abstract class PrivateVehicle : Vehicle
{
    protected override int BaseFee
    {
        return 25;
    }
}

class Sedan : PrivateVehicle
{
    protected override int ExtraFee
    {
        return 15;
    }
}

等等,每个班级。在Main方法中,您将根据输入创建实例,但实际变量将声明为类型Vehicle。实际计算将根据您创建的实例生效:

Vehicle v;
switch(input)
{
    case "semi":
        v = new Semi();
        break;
    case "truck":
        v = new LightDutyTruck();
        break;
    ...
}

int fee = v.CalculateFee();