gpt4 book ai didi

vb.net - 静态或私有(private)

转载 作者:行者123 更新时间:2023-12-03 00:33:07 25 4
gpt4 key购买 nike

这是从我开始使用 VB 编程的第一天起就一直萦绕在我脑海中的问题之一。我对此有自己的个人想法,但我想知道关于使用静态变量的普遍共识是什么。

静态变量:

Public Function Whatever() as Boolean
Static Flag as Boolean
If not Flag then
' do something
Flag = True
end if
Return Something
End sub

VS:

私有(private)变量:

Private Flag as Boolean
Public Function Whatever() as Boolean
If not Flag then
' do something
Flag = True
end if
Return Something
End sub

除非有人知道,否则上述内容在功能上是等效的,除了“私有(private)”标志被暴露以在类的其他地方使用这一事实之外。

静态问题开始出现......比如......

它们存储在哪里......它们何时真正创建和处置等。

显然,编译器以某种方式将它们添加到类的数据堆中(我知道,这个词的错误用法)...但是在开销、垃圾收集等方面是否有惩罚。

一般来说,我像躲避瘟疫一样避开它们,因为它们提出的问题多于答案。

真的有任何充分的理由使用静态吗?

PS:希望这能通过 SO 问题测试......

请注意,我不是在询问有关如何创建静态的具体信息。我更多的是在问如果任何事情都可以使使用静态变得值得怎么办。

附录...

我做了更多研究,发现这很有启发性。

https://weblogs.asp.net/psteele/7717

最佳答案

Is there really any SOLID reason to ever use statics?

是的。它可以说是 SOLID 的第一个字母:S代表“单一责任原则”。在这个特定的上下文中,规则略有不同:

Objects should have the smallest possible scope.

如果在 X 范围之外不需要对象,则应在 X 范围内声明该对象。这确保了它具有单一职责,并且不会在其他地方被不当访问。它还确保只有一个方法有责任访问该对象。

因此,在您的情况下,最好的想法确实是使变量成为函数静态(=局部)变量而不是对象私有(private)变量。

根据我的经验,这确实相当罕见。但这是最佳实践。

(就性能/内存而言,这两个变体完全相同。)

关于vb.net - 静态或私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com