11

假设我Foo在 C# 中有以下构造函数:

public Foo()
{
    // ...
}
protected Foo(bool connect)
    : this()
{
    // ...
}

我正在寻找一种仅this()connect参数为true. 这是一种方法吗?

(对于好奇的人:这背后的原因是Foo该类创建连接到某些事物的对象;当它们被创建时,它们也应该始终尝试连接。现在,我正在为它创建一个模拟器(或 MOCK)扩展Foo类。这就是我添加protected构造函数的目的;当使用这个时,应该有不创建实际连接的选项。我想在Foo尽可能少地更改类的同时实现这一点。)

4

3 回答 3

8

不,您不能this()以这种方式有条件地调用。但是,您可以将条件代码移至protected构造函数,然后从构造函数中调用该构造函数public

public Foo() : this(true)
{

}

protected Foo(bool connect)
{
   if(connect) //...
}
于 2013-05-27T07:26:22.697 回答
6

一种方法是创建一个init()函数:

public Foo()
{
    // ...
    init();
}
protected Foo(bool connect)
{
    // ...
    if (connect) {
        init();
    }
}
于 2013-05-27T07:22:15.803 回答
2

你不能有条件地调用 this() 所以你必须使用一个方法

public Foo()
{
    ConnectCode();
}
protected Foo(bool connect)
    : this()
{
    if(connect)
        ConnectCode();
}

另一种方法(不知道它是否好或是否适合您的需求)是:

public Foo(bool connect=true)
{
    if(connect)
        ConnectCode();
}

这样调用 Foo() 的代码不需要更改,但您会失去受保护的可访问性

于 2013-05-27T07:23:13.783 回答