0

我正在从构造函数调用同一类的函数。但它给了我错误。

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)”不能调用自身。

这背后的错误是什么。这种叫法可以吗??

谢谢!!!

`

4

3 回答 3

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()
    {
        //...
    }
}

请阅读使用构造函数(C# 编程指南)了解更多信息:

构造函数可以使用 this 关键字调用同一对象中的另一个构造函数。与 base 一样,this 可以带或不带参数使用,构造函数中的任何参数都可以用作 this 的参数,或用作表达式的一部分。

Also see Calling base constructor in c#.

于 2012-12-20T07:40:27.697 回答
1

您正在使用字符串类型的参数递归调用构造函数。one您有两个构造函数,一个是带参数的,另一个是parmeterlessone参数的构造函数,您调用this(GetConnection(parameter))的构造函数是唯一具有一个参数的构造函数,编译器将再次调用您正在调用的构造函数,而不是调用无参数构造函数(您拥有的另一个构造函数)

这将从参数构造函数调用parameterless构造函数。one

public Connection()
{
}

public Connection(string parameter) : this()
{
}

要调用基类的构造函数,您需要使用 :base() 而不是 this()

于 2012-12-20T07:37:15.203 回答
0

为什么不在构造函数的范围内调用它呢?

你可能有这样的东西:

public Connection(bool getParam = false)
    {
       if (getParam)
       {
          _param = GetConnection(parameter);
       }
    }
于 2012-12-20T07:35:07.640 回答