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

标签 c#

在我的类里面,我有私有(private)变量,我只能通过 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
    }
}

最佳答案

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

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

您还可以有不同的访问修饰符。就像您只想在类里面进行设置一样。
public class A {
    public XVariable {
        get;
        private set;
     }
}

您的代码不会有可访问的支持字段,但编译器会在 MSIL 中生成一个支持字段(C# 编译到的内容)。不过,您不必担心那部分。

潜在的不利因素Joe指出自动 Prop ,有时您需要在设置某些内容时在您的属性中执行其他操作(尤其是事件处理程序)。但这对于自动 Prop 是不可能的。那样的话,他的回答会更合适。但是,如果这不是您的用例所关心的,那么我的回答应该就足够了。

关于c# - 如何防止直接访问类中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28508481/

相关文章:

c# - 如何在派生类中使只读属性可写?

c# - 如何覆盖 App.cs 中的 OnFileActivated 事件以使 OpenWith 正常工作

c# - 我可以在属性中添加属性吗?

c# - 忽略 DTO 的 ReSharper 命名规则

c# - 谁应该捕获异常,调用者还是被调用者

c# - 如何从 html/css 样式字符串(即 : Futura, Verdana、Arial)在 C# winforms 控件(例如 TextBox)中设置 FontFamily

c# - 如何从 C# 中的线程访问非静态方法

c# - .NET 图表类 - 如何在同一图表上显示不同类型的间隔

c# - 在 Selenium C# 中检索 <span>Text</span> 之间的文本

c# - 具有 10 英尺 gui 的多个文本元素的 WPF 按钮