gpt4 book ai didi

c# - 静态关键字、状态/实例变量和线程安全

转载 作者:行者123 更新时间:2023-11-30 12:19:06 25 4
gpt4 key购买 nike

首先是static关键字。

我在这里阅读了几篇关于 static 关键字的文章和过去的话题。我还没有找到很多应该在什么时候使用它的场景。我所知道的是它不会在堆上创建一个对象,这告诉我从性能的角度来看,对于一个经常使用的对象来说,这会很好。

还有其他使用它的理由吗?

此外,我还阅读了一些有关 static 关键字的内容,以及它如何不应该与实例变量一起使用或改变状态。有人可以澄清一下吗?这似乎是 2+2 的情况,但我无法得到答案(缺少一些基本和简单的知识)。

最后,关于线程安全这个话题,我应该在我的代码中寻找什么来了解线程安全?

我也在 VB.NET 中发布了这个,因为我认为不同的语言 (C#/VB.NET) 不会有不同的规则。

谢谢

最佳答案

static 关键字在 C 中的含义有所不同,但在 C# 和 Java 中,它声明方法和变量属于类而不是对象。

您可能希望将它用于不需要来自特定对象的任何数据的方法和变量,但对该类型的每个对象使用相同的数据。

例如 String.Format() 是 String 类的静态方法。您可以在代码中调用它而无需创建 String 实例。同样,Math.Pi 将是一个类变量。

但是像长度方法这样的东西没有任何意义,除非它作用于字符串的特定实例,所以它必须是一个实例方法。例如,x = "hello".Length();

因此,如果您希望只使用类名而不是对象调用您的方法,那么您可以创建一个静态方法。请注意,这样的方法只能引用静态变量和调用静态方法,因为它没有用于引用非静态成员的对象。

在 C 中,static 关键字表示文件范围链接。顶级静态变量或函数不会将其名称导出到其他已编译的目标代码。所以两个文件可以声明同名的静态变量而不会产生冲突。我们在 C# 中没有这个问题,因为有命名空间,以及 private、protected 和 public 关键字来表示可见性。

还有一个含义是 C 函数中的静态变量。这些变量在函数调用之间保留它们的值。例如,您可以使用一个来计算函数被调用的次数。 C# 中的静态变量也有此属性,但您不像在 C 中那样在方法中声明它们,而是在类中声明它们。

关于c# - 静态关键字、状态/实例变量和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548311/

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