继承构造函数。即从构造函数中调用同一类的其他函数

时间:2012-12-20 07:32:31

标签: c# constructor

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

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)'无法调用自身。

这背后的错误是什么?这种类型的调用是否可能?

感谢!!!

`

3 个答案:

答案 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一样,可以使用或不使用   参数和构造函数中的任何参数都可用   参数,或作为表达式的一部分。

另见Calling base constructor in c#

答案 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);
       }
    }