[英]C# Getter Setter
我正在做與分數相關的家庭作業。 我想阻止用戶為分母(“nenner”)和分子(“zähler”)輸入小於1的數字。我試圖用set實現它但是它不起作用。如果分子/分母小於1我希望它們設置為1.我的代碼中的錯誤提示將不勝感激。
namespace Aufgabenblatt2
{
class Bruch
{
private int zähler;
public int Zähler
{
get { return zähler; }
set
{
if (value < 1)
{
//Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
zähler = 1;
}
else
zähler = value;
}
}
private int nenner;
public int Nenner
{
get { return nenner; }
set
{
if (value < 1)
{
//Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
nenner = 1;
}
else
nenner = value;
}
}
public Bruch(int zähler, int nenner)
{
this.zähler = zähler;
this.nenner = nenner;
}
/// <summary>
/// addiert zum Bruch einen weiteren hinzu
/// </summary>
/// <param name="summand">Summand</param>
/// <returns>Summe</returns>
public Bruch Addiere(Bruch summand)
{
Bruch ergebnis = new Bruch(this.zähler * summand.nenner + summand.zähler * this.nenner, this.nenner * summand.nenner);
return ergebnis;
}
public override string ToString()
{
return String.Format("{0}/{1}", this.zähler, this.nenner);
}
}
class Program
{
static void Main(string[] args)
{
Console.Write("Eingabe erster Zähler:");
int zähler1 = Convert.ToInt32(Console.ReadLine()); //Read numerator value from console and save to int zähler
Console.Write("Eingabe erster Nenner:");
int nenner1 = Convert.ToInt32(Console.ReadLine()); //Read denominator value from console and save to int nenner
Bruch b1 = new Bruch(zähler1, nenner1);
Console.Write("Eingabe zweiter Zähler:");
int zähler2 = Convert.ToInt32(Console.ReadLine()); //Read second numerator
Console.Write("Eingabe zweiter Nenner:");
int nenner2 = Convert.ToInt32(Console.ReadLine()); //Read second denominator
Bruch b2 = new Bruch(zähler2, nenner2);
Console.WriteLine("{0} + {1} = {2}", b1, b2, b1.Addiere(b2)); //Print both fractions, compute and print sum on Console
Console.ReadLine();
}
}
}
你沒有使用你的二傳手。 在Bruch b1 = new Bruch(zähler1, nenner1);
您在構造函數中設置字段 ,而不是屬性 。
更改構造函數以設置屬性:
public Bruch(int zähler, int nenner)
{
Zähler = zähler;
Nenner = nenner;
}
你可以通過在setter上設置一個斷點並看到它們從未被調用來捕獲它,然后通過代碼追溯到值的設置位置。
你的問題是你的構造函數:
public Bruch(int zähler, int nenner)
{
this.zähler = zähler;
this.nenner = nenner;
}
您的構造函數通過直接設置字段繞過setter。 將其更改為:
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler;
this.Nenner = nenner;
}
如果你這樣做,你的setter會被擊中:
b1.Zähler = 0;
Console.Writeline(b1.Zähler.ToString()); // should print 1
但是你的構造函數支持這一點。 當您的財產和支持字段僅因大小寫而異時,這是您遇到的問題之一。 它們很容易混淆。 盡管我不是那種風格的粉絲,但這對於在后備字段前加上_
東西來說是一個很好的論據。
你不在構造函數中使用setter!
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler; // << Use the setter here!
this.Nenner = nenner;
}
在另一個主題上:對於變量名稱不使用“Umlaute”是一種更好的方式。 始終使用英文名稱。
那是因為你設置了錯誤的參數。 替換Bruch
上的構造函數。
public Bruch(int zähler, int nenner)
{
this.Zähler = zähler;
this.Nenner = nenner;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.