我有一个名为“常量”的类,它包含我的应用程序中的所有“常量”变量(主要是字符串)。
课程写得如下:
public class Constants
{
public const string DATABASE="myDatabase";
public const string whatever="whatever";
public enum Colors
{
Red
Blue
Orange
}
public const string Time = "07/03/2009 9:14 PM";
}
此类的成员可以被其他类正常访问。
奇怪的是,如果删除“const”,则无法再在其他类上访问该变量。
public class Constants
{
public const string DATABASE="myDatabase";
public const string whatever="whatever";
public enum Colors
{
Red
Blue
Orange
}
public string Time = DateTime.Now.ToString(); //NO LONGER CONST
}
我试图清理解决方案并重建。我也关闭/重新运行VS2005。这是一个已知的错误?或者我错过了其他什么?
谢谢!
答案 0 :(得分:9)
删除const
修饰符后,变量将变为实例变量。实例变量只能通过类的实例访问(而不是通过类型)。这是“按设计”。
您需要使用以下代码访问时间
var c = new Constants();
var t = c.Time;
如果“const”由于某种原因不适合您的需要,特别是如果您使用的类型不能是const,则可能需要尝试静态。它在访问语义方面具有相同的效果。
答案 1 :(得分:2)
const 关键字同时隐含静态和只读。如果没有 const ,它就不再是静态的,所以你需要一个Constants
的实例来访问该成员:
var c = new Constants();
Console.WriteLine(c.Time); // should work now
答案 2 :(得分:1)
从变量声明中删除const
修饰符时,变量变为实例级声明; const
个成员被视为static
个成员。因此,您需要创建类的实例来访问变量。
因此,
Constants c = new Constants();
Console.WriteLine(c.Time);
或者,您可以添加static
和readonly
修饰符来说明
class Constants {
[...]
public readonly static string Time = DateTime.Now.ToString();
}
Console.WriteLine(Constants.Time);
答案 3 :(得分:0)
不是创建Constants类的实例,而是将类声明为“static”:
public static class Constants
{
public string Whatever="whatever";
// ...
}
您仍然需要将“变量”声明为静态,但您可以通过类访问它们:Constants.Whatever。