假设我在C#中有Foo
的以下构造函数:
public Foo()
{
// ...
}
protected Foo(bool connect)
: this()
{
// ...
}
我正在寻找只在this()
参数为connect
时才执行true
部分的方法。这是一种方法吗?
(对于好奇的人:这背后的原因是Foo
类创建了连接到某些东西的对象;当它们被创建时,它们应该总是尝试连接。现在,我正在创建一个扩展Foo
类的模拟器(或MOCK)。这就是我为protected
构造函数添加的内容;当使用此构造函数时,应该选择不创建实际连接。我想在尽可能少地更改Foo
类的同时实现这一点。)
答案 0 :(得分:8)
不,你不能以这种方式有条件地打电话给this()
。但是,您可以将条件代码移动到protected
构造函数,只需从public
中调用该构造函数:
public Foo() : this(true)
{
}
protected Foo(bool connect)
{
if(connect) //...
}
答案 1 :(得分:6)
一种方法是创建一个init()
函数:
public Foo()
{
// ...
init();
}
protected Foo(bool connect)
{
// ...
if (connect) {
init();
}
}
答案 2 :(得分:2)
您无法有条件地调用此(),因此您必须使用方法
public Foo()
{
ConnectCode();
}
protected Foo(bool connect)
: this()
{
if(connect)
ConnectCode();
}
另一种方式(不知道它是否好或是否适合您的需要)是:
public Foo(bool connect=true)
{
if(connect)
ConnectCode();
}
这样调用Foo()的代码不需要更改,但是你失去了受保护的可访问性