2010-04-03 62 views
1

我有幾個關於創建對象(2個值)以及如何「調用」的問題。執行2次計算的C#對象(2個數字)

初始化對象有:

Tweetal t1, t2, t3, t4, t5, t6; 
t1 = new Tweetal();  //a: 0 , b = 0 
t2 = new Tweetal(-2); //a: -2, b = -2 
t3 = new Tweetal(5, 17); //a: 5, b = 17 
t4 = new Tweetal(t3); //a:5, b = 17 

Console.Write("t1 = " + t1); 
Console.Write("\tt2 = " + t2); 
Console.Write("\tt3 = " + t3); 
Console.Write("\tt4 = " + t4); 
Console.WriteLine("\n"); 
t1 = t1.Som(t2); 
t4 = t2.Som(t2); 
//...... 

現在的兩件事情,我想用這個對象做所走的SUM和SUMNumber: 總:t4 = t2.sum(t3);(這將導致T4:一:3( -2 + 5),b:15(-2 + 17) SumNumber:t1 = t3.sum(8)(這將導致t1:a:13,b:25)

Sum - >參數,例如t3,t2等。 。SumNumber - >參數7,5,...或2個數字(5,7)...

接下來是我的目標代碼(在一個單獨的類),但究竟如何做我執行我的呼喚了例如T2等簡單相加計算...

public class Tweetal: Object 
{ 
    private int a; 
    private int b; 

    public Tweetal() 
    { 
     //??? 
     //Sum(...,...) 
    } 
    public Tweetal(int a) 
    { 
     //??? 
     //Sum(...,...) 
    } 
    public Tweetal(int a, int b) 
    { 
     //??? 
    } 
    public Tweetal(Tweetal //....) // to call upton the object if i request t1, t2, t3,... insteed of a direct number value) 
    { 
     // ???? 
    } 


    public void Sum(int aValue, int bValue) 
    { 
     //a = ??? 
     //b = ??? 
     //Sum(...,...) 
    } 

    public void SumNumber(int aValue, int bValue) 
    { 

    } 


    public override string ToString() 
    { 
     return string.Format("({0}, {1})", a, b); 
    }/*ToString*/ 
} 
+0

讓我只是注意每個人'tweetal'是荷蘭語'對'。 – Joren 2010-04-03 13:49:06

回答

1

首先創建一個初始化的A和B成員構造函數:

public Tweetal(int a, int b) 
{ 
    this.a = a; 
    this.b = b; 
} 

然後設置AB存取,如:

public int A { 
       get {return a;} 
       set {a = value;} 
      } 

public int B { 
       get {return b;} 
       set {b = value;} 
      } 

然後使之方法返回一個新Tweetal。

public Tweetal sum(Tweetal rhs) 
{ 
    int a = this.a + rhs.A; 
    int b = this.b + rhs.B; 
    return new Tweetal(a, b); 
} 

最後你sumNumber方法

public Tweetal sumNumber(int newVal) 
{ 
    int a = newVal + this.a; 
    int b = newVal + this.b; 
    return new Tweetal(a,b); 
} 
+1

請注意,按照慣例,這些方法將以大寫字母開頭 - SumNumber和Sum。 – 2010-04-03 18:09:08

6

好,施工部分是有三個重載的事情(假設你不希望從C#4使用可選參數):

public Tweetal() : this(0, 0) 
{ 
} 

public Tweetal(int a) : this(a, a) 
{ 
} 

public Tweetal(int a, int b) 
{ 
    this.a = a; 
    this.b = b; 
} 

然後,你需要改變你的Sum方法返回另一個`Tweetal``:

public Tweetal Sum(Tweetal other) 
{ 
    return new Tweetal(a + other.a, b + other.b); 
} 

個人而言,我會叫它Plus而非Sum,雖然,可能添加一個運算符重載:

public static Tweetal operator +(Tweetal first, Tweetal second) 
{ 
    return first.Plus(b); 
} 

然後,你可以寫:

t1 = t1 + t2; 

等,您應該在空參數添加檢查上面的代碼,然而 - 可能適當時拋出ArgumentNullException

0
public TweetalSum(int aValue, int bValue) 
{ 
    return new Tweetal(this.a + aValue, this.b + bValue);  
} 
0

我正打算通過提的是,他並沒有給出答案

public Tweetal(Tweetal t) 
{ 
    a = t.a; 
    b = t.b; 
} 

,並警告實現ICloneable像添加到Jon Skeet's答案這


class Tweetal: ICloneable 
{ 
... 
    object ICloneable.Clone() 
    { 
    return this.Clone(); 
    } 
    public virtual Tweetal Clone() 
    { 
    return (Tweetal) this.MemberwiseClone(); 
    } 
}

因爲this reason,而是建議創建

Copy(Tweetal objectToCopy)
方法,因爲它的含義比構造函數中的參數更清晰。

我會去做所有的事情,但是想得更好,因爲Jon的答案足夠好,所有這些都只是爲了打字。