静态方法中的全局变量

时间:2010-02-17 03:38:05

标签: c# static console-application

这似乎很基本,但我觉得这很微不足道。您将如何建议使用静态类(即控制台应用程序)设置全局变量?

为了给你一些背景知识,主要方法是调用一些我希望得到/设置变量的自定义事件处理程序。

您的任何想法或建议都表示赞赏。

3 个答案:

答案 0 :(得分:14)

C#中没有全局变量。变量始终是本地范围的。代码的基本单元是类,在类中,您有字段,方法和属性。

可以通过在某个类中创建公共静态字段或属性来模仿“全局变量”,但不应该。 C#因为一个很好的理由而使这很困难;全局变量是纯粹的邪恶。它们违反了OO设计的几个良好原则 - 封装,松耦合和高内聚,仅举几例。

我意识到这是一个初学者的问题,但我认为这是,因为这是一个初学者的问题,说这个是非常重要的。现在是开始学习在C#中积极劝阻或甚至危险的策略的最佳时机,并且使用静态字段/属性作为全局变量大约有六个。这些结构有合法用途,但是从一个地方到另一个地方传递数据不是其中之一。

如果两个不同的类依赖于相同的信息,则将信息从源传递到目标。这通常通过构造函数或作为被调用方法的参数来完成。您应始终拥有一个且只有一个真正“拥有”此信息的实例;使信息“全球化”意味着您无法在任何给定的时间点推断出依赖于它的人或者什么。

请考虑这一点,并尝试考虑其他方式,您可以共享您要存储在全局变量中的信息(即通过将其作为构造函数或方法的参数提供)。如果你不确定,请发布一个你想要做的事情的例子,我们会帮忙。

答案 1 :(得分:10)

最简单的方法是

public static Object MyGlobalVariable;

创建一个公共静态字段。好一点是:

public static Object MyGlobalVariable { get; set; }

这会创建一个公共静态属性。

答案 2 :(得分:1)

不是100%肯定,但您可以尝试使用单例来保存变量。如果不知道你想要完成什么,很难推荐这个解决方案是否会让你不知所措。

http://www.yoda.arachsys.com/csharp/singleton.html