C# 静态与非静态类成员
我对c语言和编程都是新手。我有一个快速的问题-关于静态/非静态变量的最佳实践是什么 我有一个变量,private int x,它属于y类。要访问这个变量,我需要引用y。然而,如果x是静态的,我可以访问这个变量而不引用y 在类y中的几个方法将引用该值的情况下,哪种方法是最好的方法 希望这是有意义的,我的问题不是太基本C# 静态与非静态类成员,c#,oop,class,object,static,C#,Oop,Class,Object,Static,我对c语言和编程都是新手。我有一个快速的问题-关于静态/非静态变量的最佳实践是什么 我有一个变量,private int x,它属于y类。要访问这个变量,我需要引用y。然而,如果x是静态的,我可以访问这个变量而不引用y 在类y中的几个方法将引用该值的情况下,哪种方法是最好的方法 希望这是有意义的,我的问题不是太基本 非常感谢最佳做法是避免公共静电干扰。在OOP中,类用于隐藏其成员。Static实际上不是实例的成员,而是类型的成员 如果您正在实现单例模式,那么Static很方便。但是,它们也需要私
非常感谢最佳做法是避免公共静电干扰。在OOP中,类用于隐藏其成员。Static实际上不是实例的成员,而是类型的成员 如果您正在实现单例模式,那么Static很方便。但是,它们也需要私有化,并通过公共财产进入
您需要阅读。您需要将静态变量视为属于类,而不是属于类的实例 如果在类的所有实例中,该变量应该相同,则使用静态变量 如果不是,请使用实例变量
一般来说,使用公共静态变量是不好的做法,它是一个共享的全局资源,如果您更改了它,您需要同步对它的访问。拥有全局状态是您希望尽可能避免的事情。您的选择取决于您的体系结构
Static
成为类型的一部分,其他人则成为该类型实例的一部分。如果希望在同一类型的不同实例之间具有某种共享状态(例如),请使用static
。如果希望每个实例都有自己的值,独立于其他实例,请使用instance
字段
顺便说一句,在这两种情况下,避免像公开
字段那样公开,但要使用属性。通常,如果您想要有一个变量public,无论是静态的还是实例的,您必须将其包装在属性中并像那样公开它。这肯定是你喜欢遵循的原则
但是,尽管有其他一些答案,我不能说不要使用静态。静态不是你在任何情况下都应该避免的魔鬼。只要保持程序干净且易于维护,您所要做的将决定是否使用静态
简单地说,不是用长辈们的语言,static代表不属于这个类的任何实例,但对他们有影响的东西。例如,生成实例的类中的静态属性的示例是一个因子,该因子对于该类的所有实例都应该是全局的,以参与在实例内部进行的计算。在这种情况下,在我看来,最好将这个因子声明为静态的,而不是在每个实例中都声明它。特别是如果这个因子在程序的生命周期中发生变化,从而影响下一次计算时。您需要向自己提出一个问题:为什么我需要x是静态的
如果将x设为静态,则意味着x是a类所有对象的一部分,但如果x不是静态的,则意味着x仅是一个对象的一部分
在一般情况下,静态字段的使用对于错误跟踪来说是痛苦的,但在某些情况下这是非常有帮助的
我建议你看看singelton的用法,我不能肯定地说它更好,因为它们有不同的用途
你熟悉OOP吗?在OOP中,静态对象或类的成员可以直接从类中访问,而非静态成员只能从其所属的实例中访问
C#在方法上遵循类似的原则。静态方法可以直接从类中访问,而非静态方法(或我喜欢调用的实例方法)必须从实例中访问。这就是为什么实例方法需要进行初始化,而静态方法则不需要,而且不实用(见下文)
在OOP中,静态变量用于实例变量无法存储的值。示例:假设您想记录一个类存在多少个实例?如何将其存储在单个实例中
这些方法使用类似的原理。它们应该用于在类的实例中执行不实际的过程。我倾向于将它们用于广泛的过程(不是一个技术术语),这意味着那些不需要我实例化对象的过程。例如,添加两个参数。(这个用法可能正确,也可能不正确,但我相信是正确的)
但是,如果要添加对象的两个属性,则该方法不能是静态的,因为您很快就会意识到,静态方法无法访问类中的实例方法或变量。当然,这是有道理的,因为静态方法不知道从类的哪个实例获取这些,除非告诉它,因为它不是实例本身的一部分)
为了不让事情进一步复杂化,我就到此为止。如果您误解了什么,请告诉我。我完全同意以下观点:
如果在类的所有实例中,该变量应该相同,则使用静态变量
如果不是,请使用实例变量
是的,将static
添加到类成员基本上意味着您可以在没有实例的情况下访问它,并且只能在任何实例之外访问它。是的,它会变成一个全局资源,如果你愿意,它甚至会变成一个全局变量
但我认为这里至少还有另一个()好的观点
使用静态成员作为全局变量不利于
这意味着一旦设置了静态成员,就不能将其作为对象传递。使用静态变量作为全局变量越多,对/ing来说就越困难
有一个解决方案。但是他们永远不应该没有
另一方面,如果你确定你真的需要g