从同一类中的其他构造函数调用构造函数

我有一个包含两个构造函数的类:

public class Lens
{
public Lens(string parameter1)
{
//blabla
}


public Lens(string parameter1, string parameter2)
{
// want to call constructor with 1 param here..
}
}

我想从第二个构造函数中调用第一个构造函数,这在 C # 中可行吗?

78435 次浏览

在构造函数的末尾追加 :this(required params)以执行 构造函数链接

public Test( bool a, int b, string c )
: this( a, b )
{
this.m_C = c;
}
public Test( bool a, int b, float d )
: this( a, b )
{
this.m_D = d;
}
private Test( bool a, int b )
{
this.m_A = a;
this.m_B = b;
}

来源: 网址: cSharp 411.com

是的,你会用下面的方法

public class Lens
{
public Lens(string parameter1)
{
//blabla
}


public Lens(string parameter1, string parameter2) : this(parameter1)
{


}
}

在链接构造函数时,还必须考虑到构造函数评价的顺序:

借用季书的回答,有点(保持代码有点类似) :

public Test(bool a, int b, string c)
: this(a, b)
{
this.C = c;
}


private Test(bool a, int b)
{
this.A = a;
this.B = b;
}

如果我们稍微改变一下在 private构造函数中执行的计算,我们就会明白为什么构造函数的顺序很重要:

private Test(bool a, int b)
{
// ... remember that this is called by the public constructor
// with `this(...`


if (hasValue(this.C))
{
// ...
}


this.A = a;
this.B = b;
}

上面,我添加了一个伪函数调用,用于确定属性 C是否具有值。乍一看,C似乎有一个值——它是在调用构造函数中设置的; 但是,一定要记住构造函数是函数。

在执行 public构造函数体之前,必须调用 this(a, b),并且必须“返回”。换句话说,最后调用的构造函数是第一个被计算的构造函数。在这种情况下,privatepublic之前计算(只是为了使用可见性作为标识符)。