我从构造函数调用同一个类的函数。但它给了我错误。
public class Connection
{
public Connection()
{
}
public Connection(string parameter) : this(GetConnection(parameter))
{
}
private static string GetConnection(string parameter)
{
return parameter;
}
}
但是public Connection(string parameter) : this(GetConnection(parameter))
给了我错误。
错误是:
构造函数'Test.Connection.Connection(string)'无法调用自身。
这背后的错误是什么?这种类型的调用是否可能?
感谢!!!
`
答案 0 :(得分:2)
您可以使用此语法调用另一个构造函数(此类构造函数通过this
关键字,或者一个可用的基类构造函数通过base
关键字)。虽然你在这里有一个潜在的StackOverflowException。
你可以这样做:
public class Connection
{
public Connection()
{
}
public Connection(string parameter)
: this()
{
string connectionString = GetConnection(parameter);
}
}
偏离主题:编译器已经无法识别以下潜在的StackOverflowException(即编译时没有错误和警告),但仅在运行时:
public class Connection
{
public Connection()
: this(GetConnectionString())
{
}
public Connection(string parameter)
: this()
{
}
public static string GetConnectionString()
{
//...
}
}
请阅读Using Constructors (C# Programming Guide)了解详情:
构造函数可以使用调用同一对象中的另一个构造函数 这个关键字。像base一样,可以使用或不使用 参数和构造函数中的任何参数都可用 参数,或作为表达式的一部分。
答案 1 :(得分:1)
您递归使用类型为string的one
参数调用contructor。你有两个构造函数,一个是parmeterless
,另一个是one
参数,你调用它的构造函数this(GetConnection(parameter))
是唯一一个带有一个参数的构造函数,编译器会再次调用你的构造函数正在调用而不是调用无参数construtor (你拥有的其他构造函数)。
这将从parameterless
参数构造函数调用one
构造函数。
public Connection()
{
}
public Connection(string parameter) : this()
{
}
要调用基类的构造函数,您需要使用:base()而不是this()
答案 2 :(得分:0)
为什么不在构造函数的范围内调用它?
你可以这样:
public Connection(bool getParam = false)
{
if (getParam)
{
_param = GetConnection(parameter);
}
}