我的问题是两部分;为什么会发生这种情况,我该如何解决呢?我试图创建两个部分类,一个仅用于常量,另一个用于其他一切,但执行仍然继续到另一个部分类来实例化单例.
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... }
该属性是在按钮单击时从表单类的实例引用的:
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. }}解决方法 要按顺序回答您的问题,
>这是因为C#保证在您可以访问任何单个静态变量之前初始化所有静态变量.当您调用静态变量,访问file_LOCATION时,所有静态变量初始化程序都会运行(包括foo).之后,static constructor运行.由于没有明确的静态构造函数,因此这里没有做任何事情.然后你的代码运行.发生这种情况的原因是,有时可能会根据另一个静态变量初始化静态变量的值,因此需要同时初始化它们.>要解决此问题,您可以将其声明为公共常量字符串file_LOCATION,而不是使用公共静态只读字符串file_LOCATION. const的值是在编译时确定的,而不是在运行时确定的,因此当您访问file_LOCATION时,不会初始化静态变量foo.如果您可以在编译时确定文件位置的值,这可以工作;你可以在你的申请中做些什么吗?
总结以上是内存溢出为你收集整理的C# – 当引用类常量时,为什么执行会流向实例变量?全部内容,希望文章能够帮你解决C# – 当引用类常量时,为什么执行会流向实例变量?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)