c#中有条件地调用构造函数
本文关键字:调用 构造函数 有条件 | 更新日期: 2023-09-27 18:15:23
假设我在c#中有以下Foo
的构造函数:
public Foo()
{
// ...
}
protected Foo(bool connect)
: this()
{
// ...
}
我正在寻找一种方法,只要connect
参数是true
,就只执行this()
部分。这是一种方法吗?
(对于好奇的人:这背后的原因是Foo
类创建了连接到某些事物的对象;当它们被创建时,它们也应该总是尝试连接。现在,我正在为它创建一个模拟器(或MOCK),它扩展了Foo
类。这就是我添加protected
构造函数的目的;当使用此选项时,应该有不创建实际连接的选项。我想实现这一点,同时改变Foo
类尽可能少。)
不,您不能以这种方式有条件地调用this()
。但是,您可以将条件代码移动到protected
构造函数中,然后从public
构造函数中调用该构造函数:
public Foo() : this(true)
{
}
protected Foo(bool connect)
{
if(connect) //...
}
一种方法是创建一个init()
函数:
public Foo()
{
// ...
init();
}
protected Foo(bool connect)
{
// ...
if (connect) {
init();
}
}
你不能有条件地调用this()所以你必须使用一个方法来代替
public Foo()
{
ConnectCode();
}
protected Foo(bool connect)
: this()
{
if(connect)
ConnectCode();
}
另一种方法(不知道它是否好或是否适合你的需要)是:
public Foo(bool connect=true)
{
if(connect)
ConnectCode();
}
这样调用Foo()的代码不需要修改,但是你失去了受保护的可访问性