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

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

概述在下面的代码段中,我从该类外部引用FILE_LOCATION,并且在执行后流入此类以访问该常量,由于某种原因而不是继续返回到进行常量调用的位置,执行继续实例化单例. 我的问题是两部分;为什么会发生这种情况,我该如何解决呢?我试图创建两个部分类,一个仅用于常量,另一个用于其他一切,但执行仍然继续到另一个部分类来实例化单例. public sealed class Foo{ public 在下面的代码段中,我从该类外部引用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... }

该属性是在按钮单击时从表单类的实例引用的:

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# – 当引用类常量时,为什么执行会流向实例变量?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1219460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存