繁体   English   中英

C#抽象类

[英]c# abstract classes

我必须创建一个伪造的DMV程序,用于计算商用车和私家车的年费。 这两个类将是抽象的,它们将从名为“所有媒介”的类中实现多态性。

我的讲师只希望一个对象创建整个程序(在主程序中),但是由于我的前三层类是抽象的。 我无法使用它们创建对象,即Vehicles = new vehicle();

所以我的问题是,由于它们是抽象的,我该如何仅创建一个对象? 如果您有任何问题可以随时提出,我可能没有很好地解释...

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

您可能也无法理解讲师“仅一个对象”的含义,因为这没有意义。

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

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

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

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

也就是说,您有一个对象引用(传输),该对象引用根据您实例化的具体类型而具有多种形式。

您的类结构如下所示:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM