1
class Bil
{
    public string regnr
    {
        get { return regnr; }
        set { regnr = value; }
    }

    public string maerke
    {
        get { return maerke; }
        set { maerke = value; }
    }

    public int vaegt
    {
        get { return vaegt; }
        set { vaegt = value; }
    }

    public bool traek
    {
        get { return traek; }
        set { traek = value; }
    }

    public Bil(string regnr, string maerke, int vaegt, bool traek)
    {
        this.regnr = regnr;
        this.maerke = maerke;
        this.vaegt = vaegt;
        this.traek = traek;
    }

    public double StatsAfgift(int vaegt, bool traek)
    {
        this.vaegt = vaegt;
        this.traek = traek;
        double statsAfgift = 0;
        if (vaegt <= 800)
            statsAfgift = vaegt * 50;
        else if (vaegt > 800)
            statsAfgift = 800 * 50 + 75 * vaegt - 800;
        if (traek == true)
            statsAfgift = statsAfgift + 200;
        return statsAfgift;
    }
}

Bil Honda = new Bil("225689", "Honda", 500, true);
Console.WriteLine("Statsafgiften på bilen er afsat til: {0:C}", Honda.StatsAfgift(500, true));
Bil Citroen = new Bil("985632", "Citroen", 400, false);
Bil Peugeot = new Bil("125697", "Peugeot", 650, true);

Bil[] bilSamling = new Bil[3];
bilSamling[0] = Honda;
bilSamling[1] = Citroen;
bilSamling[2] = Peugeot;


foreach (Bil b in bilSamling)
{
    Console.WriteLine("Statsafgift på {0} er {1}", b.maerke, b.StatsAfgift(b.vaegt, b.traek))
}

明確にするために、bil = 車です。Statsafgift = 税金。Vaegt = 重量、maerke = ブランド、regnr = 登録番号。

配列内のオブジェクトを、税を計算した各オブジェクトとともに出力する必要があります。コードをコンパイルしようとすると、スタック オーバーフロー エラーも発生します。

4

2 に答える 2

2

問題は

public string regnr 
            {
                get { return regnr; }
                set { regnr = value; }
            }

代わりに auto プロパティを使用してみてください

public string Regnr { get; set; }

regnr = value;その目的で割り当てを試みると発生するオーバーフローは、そのような他の変数を使用する必要があります。

private string _regnr;

public string Regnr
{
      get { return _regnr; }
      set { _regnr = value; }
}
于 2012-11-21T12:15:21.883 に答える
1

あなたのstackoverflowエラーはあなたのプロパティから来ています。それらを保持するローカル プライベート変数を定義する必要があります (現在、それらは自分自身を呼び出しているため)。

public bool traek { get; set; }

パラメーターは既にオブジェクト上にあるため、パラメーターを渡す必要はないようです。

public double StatsAfgift() // don't need params heere
{
    double statsAfgift = 0;
    if (vaegt <= 800)
        statsAfgift = vaegt * 50;
    else if (vaegt > 800)
        statsAfgift = 800 * 50 + 75 * vaegt - 800;
    if (traek == true)
        statsAfgift = statsAfgift + 200;
    return statsAfgift;
}

ただできるようにする;

Console.WriteLine("Statsafgift på {0} er {1}", b.maerke, b.StatsAfgift());

foreach ループがなくても同じように実行できます。

Console.WriteLine(String.Join("\n", bilSamling.Select(b => String.Format("Statsafgift på {0} er {1}", b.maerke, b.StatsAfgift()))));
于 2012-11-21T12:30:47.250 に答える