This question already has answers here:
What is the { get; set; } syntax in C#?
(17个答案)
4年前关闭。
我单身人士班上有一个奇怪的口才。
后来在另一堂课我称之为
我的应用程序卡住/冻结,调试器没有显示任何错误。但是如果我改变get; set;此属性的方法为:
一切都像魅力。
谁能解释我为什么得到这个?
你这里有很多问题。
当您获得该财产时会发生什么?
我的观点是,您试图通过返回所述属性来返回属性,这可能最终导致
关于
要解决此问题,请在幕后设置私有字段:
(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