C#构造函数调用

时间:2011-10-07 07:22:49

标签: c#

简单的问题,我该如何解决这个问题?

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

3 个答案:

答案 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;
}