C#中的静态变量
Posted
技术标签:
【中文标题】C#中的静态变量【英文标题】:Static variables in C# 【发布时间】:2010-10-24 20:00:33 【问题描述】:在 C# 中,有没有办法将静态变量放入像 VB.Net 这样的方法中?
Static myCollection As Collection
【问题讨论】:
【参考方案1】:我很确定 C# 等价物是 const
: 因此:
我对 VB.NET 不太熟悉,所以我可能会偏离基础,但这将允许您设置一个无法更改的变量。
【讨论】:
静态变量不是常数。静态变量是类的每个实例共享同一个变量实例的变量。该变量是可变的,对一个类中的值的更改将更改该类的所有其他实例中的值。 轻微修正。 C# 中的静态变量是共享的。在 VB 中,静态变量只有在包含函数被共享时才会被共享。【参考方案2】:没有,但这与在类级别使用静态变量有何不同?
Actually if you look 了解共享是如何实现的,它是一个编译器技巧,在类上创建一个静态字段。
【讨论】:
是的,这与在课堂上拥有一个完全相同。它只允许在方法级别声明,因为旧版 VB 的 static 关键字意味着本地的值将在函数/子返回后持续存在。 这是不同的,因为 VB 的“编译器技巧”还使用监视器类来确保它是线程安全的,并且因为它的作用域是方法,所以其他地方的访问会失败(更好的语义)。 它只有作用域,因为方法名用于命名变量。我假设如果你希望它在 C# 中是线程安全的,你也会实现一个监视器。我宁愿看到 C# 实现一个静态线程安全,它像在 VB 中那样包装对变量的访问,但不必担心方法的作用域。 在 VB6 中是一个静态方法变量,在一个类的所有实例之间共享或作用于实际类? 在 VB 中,“静态”变量的作用域类似于方法。因此,如果方法是共享的(C# 静态),那么变量也是。如果它在实例方法中,则它归特定对象所有。【参考方案3】:为什么 C# 不支持静态方法 变量?
问:在 C++ 中,可以编写一个 静态方法变量,并且有一个 只能访问的变量 从方法内部。 C# 没有 提供此功能。为什么?
答:C# 不支持的原因有两个 有这个功能。
首先,有可能得到几乎 通过具有相同的效果 类级静态和添加方法 静力学将需要增加 复杂性。
其次,方法级别的静态是 有点臭名昭著 调用代码时的问题 重复或来自多个线程, 并且由于定义在 方法,比较难找 定义。
-- msdn c# faq
【讨论】:
> “因重复调用或从多个线程调用代码时导致问题而臭名昭著”——有趣,因为 VB.Net 实现被认为是线程安全的。 这是如何被检查为最佳答案的。答案是否定的。据说,但还是不行。这里提供的答案是 Eric Gunnerson 的引述,是 Mircosoft 的逃避。就这么简单有用。顺便说一句,从我记事起,Java 至少从 1.2 和 C++ 起就具有这种能力。你会认为混合了 C++、Java 和 VB 的语言会支持这三种语言的共同点。如果三种语言都支持这一点,那一定是有充分理由的,而用这两个理由放弃它是很糟糕的,而且它们显然是在隐藏一些东西。 不管借口如何,这仍然是微软给出的规范答案。 只需使用私有静态变量创建 1 方法静态类。如果你真的希望你的静态方法和其他东西放在一个类中,那么让你的静态方法调用这个新方法。【参考方案4】:不,CLR 不支持这一点,VB.NET 使用编译器技巧来允许它。呃。
【讨论】:
如果你不喜欢编译器技巧,你会在 C# 中使用“yield”关键字吗? 这是一个编译器技巧吗?它只是一个成员变量,恰好具有降低的可见性。 我也从不使用yield。不过我想要静态变量方法【参考方案5】:最接近 VB.NET 的Static
是在当前类型中创建一个字段。除此之外,C# 没有等价物。
【讨论】:
以上是关于C#中的静态变量的主要内容,如果未能解决你的问题,请参考以下文章