Chr*_*ell 8 c# global-variables
我习惯脚本语言.PHP,Javascript等,我写了一些相对简单的Java和C#应用程序.这是一个我一再需要答案的问题,我想我不是唯一一个.
假设我使用的是Javascript.
我有一个由GUI调用的函数A(),它检索一些值.
函数B(),也由GUI调用,需要该值,但函数B()将被调用任意次数,即A()之后的任意长度.
我不希望A()每次重新计算值.
一个示例是登录凭据.A()要求输入用户名,B()使用该值在每次调用时追加到日志中.
为此我可能只使用一个全局变量.
现在,C#.没有全局变量!我该怎么做?
编辑: 享受答案,但有很多"尽量不使用全局"的评论.我明白了,但我想听听这个要求的替代模式.
这不是一个好习惯,但如果你真的需要它,有很多方法:
首先,总是问自己是否真的需要全局,通常不需要。但如果你真的必须拥有一个...
做到这一点的最好方法是在某个合理命名的类上拥有静态属性,它实际上成为您的全局变量
public class Credentials
{
public static string Username {get;set;}
}
//...somewhere in your code
Credentials.Username = "MyUserName";
Run Code Online (Sandbox Code Playgroud)
编辑:
这里有几个人说了全局变量不好的笼统声明,我确实同意这种观点,而且 C# 的设计者似乎也同意,因为它们根本不可用。
然而,我们应该看看全局变量不好的原因,它们大多被认为是不好的,因为你违反了封装规则。不过,静态数据并不一定是坏事,静态数据的好处是你可以封装它,我上面的例子是一个非常简单的例子,可能在现实世界的场景中,你会将静态数据包含在同一个类中是否对凭据进行其他操作,可能是登录类或用户类或对您的应用程序有意义的任何内容。