c#公共课中的角色

时间:2010-01-21 10:17:55

标签: c# .net string

我有一节课:

我想访问这些默认字符串,但C#编译器不喜欢组合Const来创建Const。

public class cGlobals
{
    // Some Default Values

    public class Client
    {
        public const string DatabaseSDF = "database.sdf";
        public const string DatabaseDir = "database";
        public const string DatabaseFullLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                                       DatabaseDir);
        public const string DataSource = Path.Combine(DatabaseDir, DatabaseSDF);
    }
}

有没有更好的方法而不是硬编码字符串?我想使用Special Folders和Path.Combine。

由于

9 个答案:

答案 0 :(得分:8)

您必须使用static readonly代替const,因为const必须在编译时成为常量。

此外,常量实际上将被编译为使用它们的程序集,因此如果您从其他程序集引用这些字段,则必须在更改常量时重新编译它们。 static readonly字段不会发生这种情况。无论哪种方式,这都是一个更好的主意:)

我实际上已经问过这个问题,我建议您阅读并接受答案:static readonly vs const

答案 1 :(得分:4)

对于要声明的变量const,指定的值必须是编译时常量;要使用方法调用的结果,您需要更改变量声明:

public static readonly string DataSource = ...;

如果你考虑一下,这个不是编译时常量,因为它会根据你运行它的操作系统给出不同的结果。它在单个执行中是常量,而不是“常规”常量。

答案 2 :(得分:4)

只是添加到其他正确的答案:一个常量应该在逻辑上是在所有时间和所有地方不变的。像十几个鸡蛋的数量,铅的原子序数等等。随着时间的推移而变化的价值,如欧盟国家的数量,或以澳元计算的金衡盎司黄金的价格,不应被建模为常数。

在你的情况下,所有时间和所有地方的值都不是逻辑上恒定的,所以不要试图使用常量。

答案 3 :(得分:3)

您可以使用readonly代替const

您还可以使用app.config来存储配置设置。

答案 4 :(得分:2)

我担心你必须使用

static public readonly string DatabaseFullLocation = Path.Combine(/* ... */);

代替;

答案 5 :(得分:2)

就个人而言,我根本不会对字符串进行硬编码。

我将它们放入appSettings。

为什么呢?好吧,如果您需要更改这些值,则需要重新编译代码。将它们作为appSettings放入将允许您只更改配置文件。

您仍然可以通过班级提供访问者。

public string DatabaseSDF 
{
  get
  {
    return System.Configuration.ConfigurationManager.AppSettings["DatabaseSDF"];
  }
}

两全其美,imo。

答案 6 :(得分:1)

  

const类型必须在编译时识别,在你的代码中   试图调用Path.Combine   运行时找出实际的   路径。你无法更新const   运行

答案 7 :(得分:0)

在“应用程序设置”中,您可以保留这些常量。

在项目属性中,选择“设置”选项卡。在网格中,您可以设置常量。

即使在运行时也可以设置这些变量。

 Message.show(My.Settings.YourVariable); //you will get the value

并由

设置
 My.Settings.YourVariable="Vibin";
    My.Settings.Save()

我认为这是最好的方式之一。

答案 8 :(得分:0)

  1. 定义一个类,让我们说GetDirectory。
  2. 使所有方法都是静态的。
  3. 定义常量类。 用 - >表示所有变量public static readonly string Name_Of_Var =“Any value”

  4. 从GetDirectory方法 - 定义您需要访问的文件夹的代码 例如:Path.Combine(GetFolderPath(Environment.SpecialFolder。“选择文件夹名称”),常量名称)

  5. 完成。