设置attribut时,Singleton类崩溃,没有异常

时间:2015-11-04 13:23:30

标签: c# ios xamarin singleton

我对我的单身人士课有一种奇怪的感觉。

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;
}

一切都像魅力一样。

任何人都可以解释我为什么会这样做?

1 个答案:

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