這是一個家庭作業,我們沒有學習C#中的結構(現在我正在學習)。所以我去msdn,但我沒有找到我的程序的問題... 是的,我不能翻譯完全分配給我的本地languange,我不明白編譯器的想法。C#結構編譯錯誤
UML我的功課:(我們必須使用它) 接口:IComparable的
- +分母{獲得;}:長
- +分母{獲得;}:長
- +理性(分子:長,分母:長)
- + GCD(一個:長,b:長):長
- +等於(R:Rationaol):布爾
- ...
而且我們不能實現其他方法或參數。
我用Java編寫了這個家庭作業,並且正確地工作。
我有一個很大的問題,我不明白是什麼意思以下誤差修改:
錯誤2支持字段的自動實現的屬性「Rational.Rational.Denominator」必須控制返回到之前被完全分配呼叫者。考慮從構造函數初始值設定項中調用默認構造函數。
錯誤3自動實現的屬性'Rational.Rational.Numerator'的備份字段必須在控制權返回給調用者之前完全分配。考慮從構造函數初始值設定項中調用默認構造函數。
錯誤4「這個」對象不能被所有字段之前使用分配給
我的代碼: 命名空間合理
{
// (Rational is underline) here the 2 and 3 error
public struct Rational : IComparable<Rational>
{
public long Numerator { get; set; }
public long Denominator { get; set; }
public Rational(long num, long den)
{
// and here (GCD is underline) the 4. error
long simple = GCD(num, den);
this.Numerator = num/simple;
this.Denominator = den/simple;
}
public long GCD(long a, long b)
{
long c = Math.Abs(a);
long d = Math.Abs(b);
if (d == 0) return c;
return GCD(d, c % d);
}
public override string ToString()
{
if (Denominator==1)
{
return Numerator + "";
}
return Numerator+"/"+Denominator;
}
public override bool Equals(object obj)
{
bool result = false;
if (obj is Rational)
{
Rational r = (Rational)obj;
result = this.Equals(r);
}
return result;
}
public bool Equals(Rational r)
{
if ((object)r ==null)
{
return false;
}
return this.Denominator == r.Denominator && this.Numerator == r.Numerator;
}
public int CompareTo(Rational other)
{
...
是的,但這是我第一次在這裏大約可變結構:) 如果我從屬性中刪除setter,我得到了這個問題: 屬性或索引'Rational ....'不能被分配給 - 它是隻讀的 而通過UML,我必須刪除setter。但是,如果我將它設置爲私有(setter),那麼它將會很好:) – blaces
只要搜索可變結構,就會發現很多問題。簡短的版本是,在某些情況下,可變結構具有奇怪的語義,人們寧願避免。公共setter的屬性不*,*不好,但任何變異的方法是。 – CodesInChaos
如果你刪除了setter,你需要使用我的第三個代碼片段,我用場替換了自動屬性。然後你需要分配給字段,而不是構造函數中的屬性。 – CodesInChaos