我有几个关于创建对象(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*/
}
答案 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;
}
然后设置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);
}
答案 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的答案已经足够好了所有这些只是为了打字。