[英]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.