我对我的单身人士课有一种奇怪的感觉。
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;
}
一切都像魅力一样。
任何人都可以解释我为什么会这样做?
答案 0 :(得分:2)
查看您的财产:
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; }
}
访问者,也可以这样说。
要解决此问题,请在幕后拥有私人字段:
{{1}}