C#对象(2个数字)执行2次计算

时间:2010-04-03 13:37:23

标签: 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:a:3(-2 + 5),b:15(-2 + 17) SumNumber:t1 = t3.sum(8)(这将导致t1:a:13,b:25)

总和 - >参数例如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*/
}

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;}
             }

然后使sum方法返回一个新的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);
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我打算通过提及他没有回答<{p>

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

来添加Jon Skeet's回答

并警告以此类方式实施ICloneable


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

因为this reason而建议创建

Copy(Tweetal objectToCopy)
方法,因为它的含义比构造函数中的param更清晰。

我会做所有这些但是想得更好,因为Jon的答案已经足够好了所有这些只是为了打字。