C# 如何防止直接访问类中的变量?
在我的类中,我有一个私有变量,我只通过get/set在类中使用它。有时我忘记了,我不应该直接使用变量(,即使在类中也是如此),而必须使用get/set 如何使之成为使用变量的唯一方法是get/setC# 如何防止直接访问类中的变量?,c#,C#,在我的类中,我有一个私有变量,我只通过get/set在类中使用它。有时我忘记了,我不应该直接使用变量(,即使在类中也是如此),而必须使用get/set 如何使之成为使用变量的唯一方法是get/set public class A { int x; public XVariable { get { return x; } set { x = value } // some additional operations }
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#has。代码中不需要支持字段
public class A {
public XVariable {
get;
set;
}
}
也可以使用不同的访问修饰符。比如,如果您只想在类中设置它
public class A {
public XVariable {
get;
private set;
}
}
代码中没有可访问的支持字段,但编译器将在MSIL中生成一个支持字段(C#编译到的内容)。不过你不必担心那部分
自动道具的一个潜在缺点是,有时在设置某些内容时,需要在属性中执行其他操作(尤其是事件处理程序)。但这是不可能与自动道具。在这种情况下,他的回答更为恰当。但是,如果您的用例不关心这个问题,那么我的答案就足够了。您可以创建一个基类,并在派生类中完成所有实际工作:
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
}
}
许多人在其私有变量前加下划线,以帮助表示该变量是私有的。(虽然这是一个意见问题,但有些人喜欢,有些人不喜欢)对这个问题有更多的见解 您可以但是,废弃该字段并使用一个
自动属性将存储一个匿名备份字段“在视图之外”。从技术上讲,它仍然会生成备份字段,但至少您不能在代码中设置:)@BradleyDotNET如果您不能触摸它,它就不存在!但是,是的,重点是,我会用解释更新答案。可能有人希望使用字段和常规属性的一个潜在原因是,在getter和setter中可以有更多的“东西”,比如事件处理程序或其他有副作用的东西-这就是他们不想直接访问字段的原因,这是一个更好的答案,因为它直接解决了这个问题。当您需要执行比简单字段可见性更高级的操作时,也可以使用其他版本(您自己定义支持字段)。
public XVariable { get; set; }