静态方法中的全局变量

Ler*_*ins 7 c# static console-application

这看起来很基本,但我发现这很微不足道.您将如何建议使用静态类(即控制台应用程序)设置全局变量?

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

您有任何想法或建议表示赞赏.

Aar*_*ght 14

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

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

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

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

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


Sam*_*eff 10

最简单的方法是

public static Object MyGlobalVariable;
Run Code Online (Sandbox Code Playgroud)

这会创建一个公共静态字段.好一点是:

public static Object MyGlobalVariable { get; set; }
Run Code Online (Sandbox Code Playgroud)

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