Zac*_*ten 3 c# singleton constants sealed partial
在下面的代码段中,我FILE_LOCATION从该类外部引用,并且在执行后流入此类以访问该常量,由于某种原因而不是继续返回到进行常量调用的位置,执行继续实例化单例.
我的问题是两部分; 为什么会发生这种情况,我该如何解决呢?我试图创建两个部分类,一个仅用于常量,另一个用于其他所有,但执行仍然继续到另一个部分类来实例化单例.
public sealed class Foo
{
public static readonly string FILE_LOCATION = @"path\to\file";
// (singleton code modeled after:
// http://csharpindepth.com/articles/general/singleton.aspx --fourth version)
private static readonly Foo foo = new Foo();
// Rest of class implementation...
}
Run Code Online (Sandbox Code Playgroud)
该属性是在按钮单击时从表单类的实例引用的:
public partial class MyForm : Form
{
public void button1_Click(object sender, EventArgs e)
{
string s = Foo.FILE_LOCATION;
// this location is only reached AFTER the singleton is instantiated.
}
}
Run Code Online (Sandbox Code Playgroud)
要按顺序回答您的问题,
FILE_LOCATION,所有静态变量初始化程序都会运行(包括foo).之后,静态构造函数运行.由于没有明确的静态构造函数,因此这里没有做任何事情.然后你的代码运行.发生这种情况的原因是,有时可能会根据另一个静态变量初始化静态变量的值,因此需要同时初始化它们.public static readonly string FILE_LOCATION可以将其声明为,而不是使用public const string FILE_LOCATION.const的值是在编译时确定的,而不是在运行时确定的,因此在foo访问时不会初始化静态变量FILE_LOCATION.如果您可以在编译时确定文件位置的值,这可以工作; 你可以在你的申请中做些什么吗?| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |