CONST变量已删除。会员不能再在课外访问

时间:2009-07-03 13:18:22

标签: c# const

我有一个名为“常量”的类,它包含我的应用程序中的所有“常量”变量(主要是字符串)。

课程写得如下:

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。这是一个已知的错误?或者我错过了其他什么?

谢谢!

4 个答案:

答案 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);

或者,您可以添加staticreadonly修饰符来说明

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。