静态与非静态类成员

我是c夏普和编程方面的新手。我有一个快速的问题-关于静态/非静态变量的最佳实践是什么?

我有一个变量,private int x,它属于y类。要访问此变量,我需要引用y。但是,如果x是静态的,我可以访问该变量而无需引用y。

在y类中的多个方法将引用该值的情况下,哪种方法最好?

希望这是有道理的,我的问题不是太基本了!

非常感谢


有只小跳蛙
浏览 322回答 3
3回答

aluckdog

您需要考虑静态变量属于该类,而不是该类的实例。如果在类的所有实例中此变量都应该相同,请使用静态变量。如果不是,请使用实例变量。通常,使用公共静态变量是一种不好的做法 -它是共享的全局资源,如果更改它,则需要同步对其的访问。您要避免拥有全局状态。

潇潇雨雨

我不能说一个更好,因为它们有不同的用途。您熟悉OOP吗?在OOP中,可以直接从类访问静态对象或类的成员,而只能从其所属的实例访问非静态成员。C#遵循类似的方法原理。可以直接从类中访问静态方法,而非静态方法(或我喜欢称呼它们的实例方法)必须从实例中访问。这就是为什么实例方法需要实例化的原因,而静态方法则不需要实例化,而且不切实际(见下文)。在OOP中,静态变量用于无法由实例变量存储的值。示例:假设您想统计一个类存在多少个实例?您如何将其存储在单个实例中?这些方法使用类似的原理。它们应用于在类的实例中不可行的过程。我倾向于将它们用于广泛的过程(而不是技术术语),这意味着不需要我实例化对象的过程。示例,添加两个参数。(此用法可能正确,也可能不正确,但我相信是这样)但是,如果要添加对象的两个属性,则该方法不能是静态的,因为您很快就会意识到,静态方法无法访问类中的实例方法或变量。当然这是有道理的,因为除非被告知,否则该静态方法将不知道从哪个类的实例获取这些信息,因为它不是实例本身的一部分)为了不使事情进一步复杂化,我将在这里停止。让我知道您是否误解了什么。
打开App,查看更多内容
随时随地看视频慕课网APP