C#-当引用类常量时,为什么执行会流向实例变量?
在下面的代码段中,我引用了这个类之外的C#-当引用类常量时,为什么执行会流向实例变量?,c#,singleton,constants,partial,sealed,C#,Singleton,Constants,Partial,Sealed,在下面的代码段中,我引用了这个类之外的FILE\u LOCATION,在执行流入这个类以访问该常量之后,出于某种原因,执行将继续实例化该单例,而不是继续返回进行常量调用的位置 我的问题分为两部分;为什么会发生这种情况?我该如何解决?我试图创建两个分部类,一个单独用于常量,另一个用于其他所有内容,但执行仍然继续到另一个分部类来实例化单例 public sealed class Foo { public static readonly string FILE_LOCATION = @"p
FILE\u 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.
}
}
按顺序回答您的问题
文件\u位置
,然后所有静态变量初始值设定项都会运行(包括foo
)。在那之后,跑步。因为没有显式的静态构造函数,所以这里什么都不做。然后你的代码运行。发生这种情况的原因是,有时一个静态变量的值可能会根据另一个静态变量进行初始化,因此需要同时对它们进行初始化public const string FILE\u LOCATION
,而不是使用public static readonly string FILE\u LOCATION
。常量的值是在编译时而不是在运行时确定的,因此当您访问文件位置时,静态变量foo
将不会初始化。如果您可以在编译时确定文件位置的值,那么这可以起作用;这是你可以在你的申请中做的吗
确实需要更完整的代码才能与此交互。很抱歉,我添加了代码来显示常量是如何被引用的。我想不出还有什么会影响功能的东西。@zposten:关于另一个问题,我想你还没有完全理解什么是分部类。分部类只是将大型类拆分为单独的.CS文件的一种方法。就编译器而言,它们是同一个类。这绝对是问题所在!谢谢你精彩的演绎和解释。