This question already has answers here:
What is the { get; set; } syntax in C#?
                                
                                    (17个答案)
                                
                        
                                4年前关闭。
            
                    
我单身人士班上有一个奇怪的口才。

public class HttpCommunicator{
    public const int TYPEJSON = 1;

    private static HttpCommunicator;
    private bool TypeIsInit = false;

    public static HttpCommunicator Instance {
        get{
            if( instance == null ){
                instance = new HttpCommunication();
            }
            return instance;
        }
    }

    private HttpCommunicator(){}

    public int RequestType {get {return RequestType;} set{ this.RequestType = value; TypeIsInit = true;}
}


后来在另一堂课我称之为

HttpComminicator.Instance.RequestType = HttpCommunicator.TYPEJSON;


我的应用程序卡住/冻结,调试器没有显示任何错误。但是如果我改变get; set;此属性的方法为:

public int GetRequestType(){
    return RequestType;
}

public void SetRequestType(int value){
    RequestType = value;
    TypeIsInit = true;
}


一切都像魅力。

谁能解释我为什么得到这个?

最佳答案

查看您的财产:

public int RequestType
{
   get { return RequestType; }
   set { this.RequestType = value; TypeIsInit = true; }
}


你这里有很多问题。

当您获得该财产时会发生什么?
RequestType.get将要执行,然后将执行return RequestType;。要返回RequestType,您必须阅读RequestType,这将触发RequestType.get,循环将不断进行。

我的观点是,您试图通过返回所述属性来返回属性,这可能最终导致StackOverflowException

关于set访问器也可以这样说。

要解决此问题,请在幕后设置私有字段:

private int _requestType;
public int RequestType
{
     get { return _requestType; }
     set { _requestType = value; TypeIsInit = true; }
}

07-27 13:58