我对c#和编程一般都很陌生。我的问题是 - 在处理静态/非静态变量时,应该如何做到最佳实践。
我有一个变量,private int x,它属于类y。要访问此变量,我需要引用y。但如果x是静态的,我就可以直接访问这个变量而不需要引用y。
在类y中有几种方法会引用这个值,那么哪种方式最好呢?
希望这样表达清楚,我的问题不太基础!
非常感谢。
在考虑静态变量时,需要将其看作是属于类而非类的实例。
如果在该类的所有实例中,该变量应相同,则使用静态变量。
否则,使用实例变量。
通常情况下,具有公共静态变量是一种不良实践的做法——它是一个共享的全局资源,如果更改它,则需要同步访问。尽可能避免使用全局状态。
避免使用public static是最佳实践。在面向对象编程中,类的成员应该被隐藏起来。Static实际上不是实例的成员,而是类型的成员。
如果你正在实现单例模式,那么static很方便。但是它们需要被设置为私有并通过公共属性进行访问。
您需要阅读静态类和静态类成员(C#编程指南)。
public readonly static DateTime DefaultDate = ...;
)。可变的静态字段或可变对象的 readonly static
应该仔细审查,因为这是多线程错误的源头。因此,总的来说,我同意 Aliostad 的观点。 - Steven你的选择取决于你的架构。
Static
属于 Type 的一部分,而其他部分属于该类型的 instance。如果你想在同一类型的不同 instances 之间共享某些状态(例如),请使用 static
。如果你希望每个实例都有自己的值,独立于其他实例,请使用 instance
字段。
顺便提一下,在这两种情况下,避免暴露公共的 fields
,而是使用属性。
是的,将如果在类的所有实例中,该变量应该是相同的,则使用静态变量。
如果不是,则使用实例变量。
static
添加到类成员基本上意味着您可以在没有实例的情况下访问它,并且仅在任何实例之外。是的,它变成了一个全局资源,甚至可以说是一个全局变量。