1

所以我试图对此保持聪明,但看起来这个想法很愚蠢,因为我马上就遇到了堆栈溢出异常。

理想情况下,我想CheckInternetStatus在使用IsConnected标志时运行。

我怎样才能正确地做到这一点?或者这根本不是一个好主意?

public static class Internet
{
    public static bool IsConnected
    {
        get
        {
            CheckInternetStatus();
            return IsConnected;
        }
        set
        {
            IsConnected = value;
        }
    }
}

附加信息:CheckInternetStatus更新IsConnected

4

6 回答 6

5

您的代码有两个问题:

1)没有后备变量,您正在递归调用属性IsConnected

private bool _isConnected;

public static bool IsConnected
{
    get
    {
        _isConnected = CheckInternetStatus();
        return _isConnected;
    }
    set
    {
        _isConnected = value;
    }
}

2)你不应该在房产中做“大量工作”。改用一种方法。这可以更好地向阅读您的代码的人传达意图

实际上有3件事:

3)如果你坚持使用一个属性(我不会),setter 可能应该是private. 如果您实际上没有连接,则不希望设置连接。

于 2013-02-16T01:39:45.193 回答
4

认为你想要

private static bool _isConnected;
public static bool IsConnected
    {
        get
        {
            CheckInternetStatus();
            return _isConnected;
        }
        set
        {
            _isConnected= value;
        }
    }

因为你递归调用你的财产

于 2013-02-16T01:38:28.947 回答
1

在这种情况下,支持字段可能非常有用。

private static bool _isConnected;

public static bool IsConnected {
    get {
        CheckInternetStatus();
        return _isConnected;
    }
    set {
        _isConnected= value;
    }
}

备择方案

附加信息:CheckInternetStatus 更新 IsConnected

CheckInternetStatus应该操纵私有领域。此外,set应该是私有的(或可能不存在)。但IsConnected似乎有一些意想不到的副作用(连接行为)。相反,怎么样:

public static bool IsConnected {
    get;
    private set;
}

public static void Connect(){
    if( IsConnected ){
        // exit, or fail if this is considered an exceptional scenario
    }

    // do work
    IsConnected = true;
}

// call
if( !Foo.IsConnected ){
    Foo.Connect();
}

这似乎更清晰,更明显。属性(作为一般规则)不应执行大量工作。

于 2013-02-16T01:38:52.663 回答
0

你无限循环。

return IsConnected;

调用你的吸气剂,它一次又一次地调用你的吸气剂,直到你崩溃。

于 2013-02-16T01:39:01.763 回答
0

你做错了。你需要一些实例变量。你在呼唤自己。修正看起来像:

public static class Internet
{
private static bool _isConnected;

public static bool IsConnected
{
    get
    {
        CheckInternetStatus();
        return _isConnected;
    }
    set
    {
        _isConnected = value;
    }
}

}

于 2013-02-16T01:39:53.553 回答
0

我想你也可以这样使用,

       private static bool _isConnected;

        public static bool isConnected
        {
            get { CheckInternetStatus(); return _isConnected; }
            set { isConnected = value; }
        }
于 2013-02-16T01:49:17.437 回答