如何防止直接访问类中的变量?

时间:2015-02-13 20:48:16

标签: c#

在我的课堂上我有私有变量,我只在get / set中使用它。有时我会忘记,我不应该直接使用变量(甚至在类中)并且必须使用get / set。

如何使用变量的唯一方法是get / set?

public class A {
    int x;

    public XVariable {
        get { return x; }
        set { x = value }

        // some additional operations
    }

    void SomeMethod() {
        x = 5; // no
        XVariable = 5; // yes
    }
}

3 个答案:

答案 0 :(得分:8)

C#有auto properties。您的代码中不需要支持字段。

public class A {
    public XVariable {
        get;
        set;
     }
}

您还可以使用不同的访问修饰符。就像你只想在课堂上设置它一样。

public class A {
    public XVariable {
        get;
        private set;
     }
}

无法从代码中访问支持字段,但编译器将在MSIL中生成一个(C#编译为)。你不必担心那部分。

潜在的缺点Joe指出了自动道具,有时你需要在设置时在你的属性中执行其他操作(尤其是事件处理程序)。但这与汽车道具无法实现。在那种情况下,他的回答会更合适。但如果这不是您的用例的问题,那么我的回答就足够了。

答案 1 :(得分:2)

您可以创建基类,并在派生类中完成所有实际工作:

public class SomeBaseClass {
    private int _x;
    public int X { get { return _x; } set { _x = value; } }
}

public class DerivedClass : SomeBaseClass {
    void DoSomething() {
        // Does not have access to _x
    }
}

答案 2 :(得分:0)

许多人使用下划线为其私有变量添加前缀,以帮助表示变量是私有的。 (虽然这是一个观点问题,但有些人喜欢它而有些人不喜欢)对this问题有更多的了解。

可以但是,请废弃该字段并使用auto property,例如:

public XVariable { get; set; }

auto属性将存储匿名支持字段" out of view"。