简单的问题,我该如何解决这个问题?
public MyClass(string s)
{
int k = s.Length;
int l = SomeFunction(s);
int m = GetNumber();
if (Valid(l, m))
{
int p = SomeOtherFunction(k, m);
MyBigObject o = new MyBigObject(p);
// here I want to call the other constructor MyClass(o)
}
}
public MyClass(MyBigObject x)
{
this.o = x;
}
答案 0 :(得分:9)
您可以使用以下代码执行此操作:
public MyClass(string s) : this(s.Length)
{
}
public MyClass(int x)
{
this.n = x;
}
对于您编辑过的问题:
public MyClass(string s) : this(ConstructorHelper(s))
{
}
public MyClass(MyBigObject x)
{
this.o = x;
}
private static MyBigObject ConstructorHelper(string s)
{
int k = s.Length;
int l = SomeFunction(s);
int m = GetNumber();
if (Valid(l, m))
{
int p = SomeOtherFunction(k, m);
MyBigObject o = new MyBigObject(p);
return o;
}
return null;
}
答案 1 :(得分:2)
提取常用功能并将其包装到单独的方法中。
public MyClass(string s)
{
int k = s.Length;
int l = SomeFunction(s);
int m = GetNumber();
if (Valid(l, m))
{
int p = SomeOtherFunction(k, m);
MyBigObject o = new MyBigObject(p);
this.init(o);
}
}
public MyClass(MyBigObject x)
{
this.init(x);
}
public void init(MyBigObject x)
{
this.o = x;
}
答案 2 :(得分:0)
public MyClass(string s) : this(s.Length)
{
//
}
public MyClass(int x)
{
this.n = x;
}