加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – 当引用类常量时,为什么执行会流向实例变量?

发布时间:2020-12-15 23:23:45 所属栏目:百科 来源:网络整理
导读:在下面的代码段中,我从该类外部引用FILE_LOCATION,并且在执行后流入此类以访问该常量,由于某种原因而不是继续返回到进行常量调用的位置,执行继续实例化单例. 我的问题是两部分;为什么会发生这种情况,我该如何解决呢?我试图创建两个部分类,一个仅用于常量,另
在下面的代码段中,我从该类外部引用FILE_LOCATION,并且在执行后流入此类以访问该常量,由于某种原因而不是继续返回到进行常量调用的位置,执行继续实例化单例.

我的问题是两部分;为什么会发生这种情况,我该如何解决呢?我试图创建两个部分类,一个仅用于常量,另一个用于其他一切,但执行仍然继续到另一个部分类来实例化单例.

public sealed class Foo
{  
    public static readonly string FILE_LOCATION = @"pathtofile";

    // (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.如果您可以在编译时确定文件位置的值,这可以工作;你可以在你的申请中做些什么吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读