为什么在构造函数中使用属性时会出现堆栈溢出?

时间:2009-11-27 05:01:47

标签: c# properties constructor

我有一个非静态类,其中我有几个属性,即serverURL,serverPort等,并且该类有一个构造函数。构造函数接受参数,然后用它来“设置”属性,初始化它们。这是代码:

public Server(string newServerAddress, int newServerPort) {

        serverAddress = newServerAddress;
        serverPort = newServerPort;
}

public string serverAddress {
    get {
        return serverAddress;
    }
    set {
        serverAddress = value;
    }
}
public int serverPort {
    get {
        return serverPort;
    }
    set {
        serverPort = value;
    }

由于某种原因,这给了我一个堆栈溢出错误,我不知道为什么。以下是用于调用它的代码:

Server test = new Server("server.url.here",8080);

这个代码显然是由一个类绑定的,但我把它留在了这里。这是一个业余问题,我以前做过这样的事情,但我对发生的事情感到很困惑,当我在visual studio中尝试调试它时,它告诉我它无法调试它,大概是因为它正在使用堆栈进行调试。

4 个答案:

答案 0 :(得分:5)

观察区分大小写。该物业正在返回。

public string serverAddress {
    get {
        return serverAddress; // recursing here
    }
}

答案 1 :(得分:3)

您忘记为属性使用支持字段。属性setter使用属性本身,无休止地递归。修复如下:

private string mServerAddress;
public string serverAddress {
    get {
        return mServerAddress;
    }
    set {
        mServerAddress = value;
    }
}

或使用自动属性语法:

public string ServerAddress { get; set; }

答案 2 :(得分:1)

你在属性setter或getter中有递归。 请尝试使用此代码:

public Server(string newServerAddress, int newServerPort) {    
        serverAddress = newServerAddress;
        serverPort = newServerPort;
}

public string serverAddress { get; set; }
public int serverPort { get; set; }

答案 3 :(得分:1)

您正在引用setter中的setter ...

在您的属性serverAddress中,您有以下行:

serverAddress = value

将转到serverAddress属性的setter,并循环地进行循环...

使用以下语法:

private string _serverPort;
public string ServerPort
{
 get { return _serverPort; }
 set { _serverPort = value; }
}

希望这会有所帮助:)