int a, b, c;
Constructor()
{
a = 5;
b = 10;
c = 15;
//do stuff
}
Constructor(int x, int y)
{
a = x;
b = y;
c = 15;
//do stuff
}
Constructor(int x, int y, int z)
{
a = x;
b = y;
c = z;
//do stuff
}
为了防止“东西”和一些任务的重复,我尝试了类似的东西:
int a, b, c;
Constructor(): this(5, 10, 15)
{
}
Constructor(int x, int y): this(x, y, 15)
{
}
Constructor(int x, int y, int z)
{
a = x;
b = y;
c = z;
//do stuff
}
这适用于我想做的事情,但有时我需要使用一些冗长的代码来创建新对象或进行一些计算:
int a, b, c;
Constructor(): this(new Something(new AnotherThing(param1, param2, param3),
10, 15).CollectionOfStuff.Count, new SomethingElse("some string", "another
string").GetValue(), (int)Math.Floor(533 / 39.384))
{
}
Constructor(int x, int y): this(x, y, (int)Math.Floor(533 / 39.384))
{
}
Constructor(int x, int y, int z)
{
a = x;
b = y;
c = z;
//do stuff
}
这段代码和以前几乎一样,只是传递的参数不是很可读。我宁愿做这样的事情:
int a, b, c;
Constructor(): this(x, y, z) //compile error, variables do not exist in context
{
AnotherThing at = new AnotherThing(param1, param2, param3);
Something st = new Something(aThing, 10, 15)
SomethingElse ste = new SomethingElse("some string", "another string");
int x = thing.CollectionOfStuff.Count;
int y = ste.GetValue();
int z = (int)Math.Floor(533 / 39.384);
//In Java, I think you can call this(x, y, z) at this point.
this(x, y, z); //compile error, method name expected
}
Constructor(int x, int y): this(x, y, z) //compile error
{
int z = (int)Math.Floor(533 / 39.384);
}
Constructor(int x, int y, int z)
{
a = x;
b = y;
c = z;
//do stuff
}
基本上我在构造函数体内构建参数。然后我试图将这些内置参数传递给另一个构造函数。我想我记得在使用 Java 编码时,能够在另一个构造函数的主体内使用“this”和“super”关键字来调用构造函数。在 C# 中似乎不可能。
有没有办法轻松做到这一点?我做错了什么吗?如果这是不可能的,我应该坚持使用不可读的代码吗?
我想我总是可以将重复的代码完全剪切到构造函数之外的另一种方法中。然后每个构造函数只做自己的事情并调用其他构造函数共享的代码。