亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何增加派生類的值

如何增加派生類的值

C#
qq_笑_17 2023-07-09 16:30:41
我正在建模一個模擬汽車和卡車的駕駛和加油的程序。這就是我到目前為止所做的:public abstract class Vehicle{    protected Vehicle(double fuelQuantity, double fuelConsumption)    {        this.FuelQuantity = fuelQuantity;        this.FuelConsumption = fuelConsumption;    }    public double FuelQuantity { get; protected set; }     public double FuelConsumption { get; protected set; }     public abstract string Drive(double distance);    public abstract void Refuel(double liters);}public class Car : Vehicle{    public Car(double fuelQuantity, double fuelConsumption) : base      (fuelQuantity, fuelConsumption)    {           }    public override string Drive(double distance)    {    }    public override void Refuel(double liters)    {    }}所以,我想增加0.9升汽車的油耗值(現在是夏天,所以汽車使用空調)。哪里可以做到這一點?我不想在構造函數中這樣做,因為我認為這樣不行。
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

這將是添加裝飾器的好地方。一些偽代碼(不完整?。┑M苊靼?。


public class VehicleDecorator : Vehicle


  public VehicleDecorator(Vehicle vehicle)

  {

      this.vehicle = vehicle;

  } 


public class VehicleWithAc : VehicleDecorator


  public VehicleWithAc(Vehicle vehicle) : base(vehicle){}

  public override double FuelConsumption { 

               get{

                     return base.FuelConsumption+0.9 } }

然后在您的程序中創建您的汽車并使用 VehicleWithAc 裝飾器對其進行裝飾


Program

   var baseCar = new Car();

   var summerDriver = new VehicleWithAc(baseCar)


查看完整回答
反對 回復 2023-07-09
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

我認為你遇到的問題是你fuelConsumption作為單個變量傳遞給構造函數,從而說明


這是汽車的油耗,完全停止。


正如您所發現的,解決這個問題 - 燃油消耗不是一個靜態的東西,它取決于其他變量,例如空調是否打開。Doug 已經接近提到裝飾器了,但我認為它可以更簡單一些,但更靈活。


我認為您仍然應該傳遞一個燃油消耗數據,為了簡單起見,我們將其稱為baseFuelConsumption。請記住,車輛通常根據城市和高速公路的燃油消耗進行分級,因為它們通常不同,但出于此目的,我們將忽略它。


拋開行駛距離等,我們有:


public abstract class Vehicle

{

    private readonly double _baseFuelConsumption;


    protected double BaseFuelConsumption => _baseFuelConsumption;


    protected Vehicle(double baseFuelConsumption) => _baseFuelConsumption = baseFuelConsumption;


    public virtual double ActualFuelConsumption => BaseFuelConsumption;

}

那么,空調會額外消耗多少油耗呢?讓我們以 Doug 的答案為基點,并將其賦予我們的汽車......


public class Car : Vehicle

{

    private const double _ACModifier = 0.9;


    public Car()

    :base(1)

    {       

    }


    public bool IsACOn { get; set; }


    public override double ActualFuelConsumption

    {

        get

        {

            double consumption = base.ActualFuelConsumption;

            consumption += IsACOn ? _ACModifier : 0;

            return consumption;

        }

    }

}

現在,為了進行模擬,您可以隨著時間的推移打開和關閉交流電,并ActualFuelConsumption隨著時間的推移測量屬性。


查看完整回答
反對 回復 2023-07-09
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

如果您想使用此結構,您必須為屬性設置自定義規則。


 public abstract class Vehicle

{

    protected Vehicle(double fuelQuantity, double fuelConsumption)

    {

        this.FuelQuantity = fuelQuantity;

        this._fuelConsumption = fuelConsumption;

        this.FuelConsumption = fuelConsumption;

    }


    public double FuelQuantity { get; protected set; }

    private double _fuelConsumption { get;  set; }


    public double FuelConsumption {

        get { return _fuelConsumption; }

        protected set {

            _fuelConsumption = (_fuelConsumption + 0.9);

        } }


    public abstract string Drive(double distance);


    public abstract void Refuel(double liters);

}

因為您的類是抽象的,并且派生類中的屬性沒有可重寫的屬性,所以您無法訪問基屬性。例如,您可以在集合中使用條件


public double FuelConsumption {

    get { return _fuelConsumption; }

    protected set {

      if(Issummer)

      {

      _fuelConsumption = (_fuelConsumption + 0.9);

      }else{ _fuelConsumption =_fuelConsumption;}

    } }


查看完整回答
反對 回復 2023-07-09
  • 3 回答
  • 0 關注
  • 149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號