为了账号安全,请及时绑定邮箱和手机立即绑定

静态与非静态类成员

静态与非静态类成员

C#
有只小跳蛙 2019-11-18 14:33:03
我是c夏普和编程方面的新手。我有一个快速的问题-关于静态/非静态变量的最佳实践是什么?我有一个变量,private int x,它属于y类。要访问此变量,我需要引用y。但是,如果x是静态的,我可以访问该变量而无需引用y。在y类中的多个方法将引用该值的情况下,哪种方法最好?希望这是有道理的,我的问题不是太基本了!非常感谢
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

您需要考虑静态变量属于该类,而不是该类的实例

如果在类的所有实例中此变量都应该相同,请使用静态变量。

如果不是,请使用实例变量。

通常,使用公共静态变量是一种不好的做法 -它是共享的全局资源,如果更改它,则需要同步对其的访问。您要避免拥有全局状态。


查看完整回答
反对 回复 2019-11-18
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我不能说一个更好,因为它们有不同的用途。

您熟悉OOP吗?在OOP中,可以直接从类访问静态对象或类的成员,而只能从其所属的实例访问非静态成员。

C#遵循类似的方法原理。可以直接从类中访问静态方法,而非静态方法(或我喜欢称呼它们的实例方法)必须从实例中访问。这就是为什么实例方法需要实例化的原因,而静态方法则不需要实例化,而且不切实际(见下文)。

在OOP中,静态变量用于无法由实例变量存储的值。示例:假设您想统计一个类存在多少个实例?您如何将其存储在单个实例中?

这些方法使用类似的原理。它们应用于在类的实例中不可行的过程。我倾向于将它们用于广泛的过程(而不是技术术语),这意味着不需要我实例化对象的过程。示例,添加两个参数。(此用法可能正确,也可能不正确,但我相信是这样)

但是,如果要添加对象的两个属性,则该方法不能是静态的,因为您很快就会意识到,静态方法无法访问类中的实例方法或变量。当然这是有道理的,因为除非被告知,否则该静态方法将不知道从哪个类的实例获取这些信息,因为它不是实例本身的一部分)

为了不使事情进一步复杂化,我将在这里停止。让我知道您是否误解了什么。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信