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

C# C对象(2个数字)执行2次计算,c#,C#,我有几个关于创建object 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(

我有几个关于创建object 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);
//......
现在我想对这个对象做的两件事是求和和和数: 总和:t4=t2.sumt3;这将导致t4:a:3-2+5,b:15-2+17 SumNumber:t1=t3.sum8这将导致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*/
}

好的,构造部分是假设您不想使用C4中的可选参数,则有三个重载:

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);
}
就我个人而言,我将其称为加号而不是求和,并且可能会添加一个运算符重载:

public static Tweetal operator +(Tweetal first, Tweetal second)
{
    return first.Plus(b);
}
然后你可以写:

t1 = t1 + t2;

但是,您应该在上面的代码中添加对null参数的检查,并可能在适当的情况下抛出ArgumentNullException。

好的,构造部分是一个有三个重载的问题,假设您不想使用C4中的可选参数:

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

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

public Tweetal(int a, int b)
{
    this.a = a;
    this.b = b;
}
public TweetalSum(int aValue, int bValue) 
{ 
    return new Tweetal(this.a + aValue, this.b + bValue);      
} 
然后,您需要更改Sum方法以返回另一个“Tweetal”:

public Tweetal Sum(Tweetal other)
{
    return new Tweetal(a + other.a, b + other.b);
}
就我个人而言,我将其称为加号而不是求和,并且可能会添加一个运算符重载:

public static Tweetal operator +(Tweetal first, Tweetal second)
{
    return first.Plus(b);
}
然后你可以写:

t1 = t1 + t2;

等等。但是,您应该在上述代码中添加空参数检查,并可能在适当的情况下引发ArgumentNullException。

首先创建一个初始化a和b成员的构造函数:

public TweetalSum(int aValue, int bValue) 
{ 
    return new Tweetal(this.a + aValue, this.b + bValue);      
} 
public Tweetal(int a, int b)
{
    this.a = a;
    this.b = b;
}
然后设置A和B访问器,例如:

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);
}

首先创建初始化a和b成员的构造函数:

public Tweetal(int a, int b)
{
    this.a = a;
    this.b = b;
}
然后设置A和B访问器,例如:

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);
}
我打算补充一点,他并没有回答我的问题

public Tweetal(Tweetal t) 
{ 
    a = t.a; 
    b = t.b; 
} 
并警告不要像这样实施iClonable


class Tweetal: ICloneable
{
...
  object ICloneable.Clone() 
  { 
    return this.Clone(); 
  }
  public virtual Tweetal Clone()
  {
    return (Tweetal) this.MemberwiseClone();
  }
}
因为,而不是建议创建方法,因为它的含义比构造函数中的参数更清楚

Copy(Tweetal objectToCopy)
我本来打算这么做的,但考虑到乔恩的答案已经足够好了,而且只是打字太多了。

我打算补充一下,说他没有给我答案

public Tweetal(Tweetal t) 
{ 
    a = t.a; 
    b = t.b; 
} 
并警告不要像这样实施iClonable


class Tweetal: ICloneable
{
...
  object ICloneable.Clone() 
  { 
    return this.Clone(); 
  }
  public virtual Tweetal Clone()
  {
    return (Tweetal) this.MemberwiseClone();
  }
}
因为,而不是建议创建方法,因为它的含义比构造函数中的参数更清楚

Copy(Tweetal objectToCopy)

我本来打算这么做的,但考虑得更好,因为Jon的答案已经足够好了,而且所有这些都需要大量的打字。

让我给大家记下“tweetal”是荷兰语表示“pair”。让我给大家记下“tweetal”是荷兰语表示“pair”。请注意,按照惯例,这些方法将以大写字母SumNumber和Sum开头。请注意按照惯例,这些方法将以大写字母sumname和Sum开头。