不知道在C#中声明我的常量的方法

时间:2014-10-20 14:14:49

标签: c# oop constants global

我想知道如何为类声明一个“全局”变量。那就是我希望这个变量只在这个类中可用,而不是在其他类中。

声明它们的最佳形式是什么?或者我什么时候使用这些表格? 我想拥有它OO。

第一表格:

enter code here
private const string _Column1= "Names";
private const string _Column2= "Numbers";
private const string _Column3= "Alarms";

第二表格:

private enum enumColumnNames 
{
    Names,         // integer value = 0
    Numbers,        // 1
    Alarms,         // 2
};

第3表:

internal sealed class clsColumnNames
{
    public static readonly clsColumnNames Column1 = new clsColumnNames("Names");
    public static readonly clsColumnNames Column2 = new clsColumnNames("Numbers");
    public static readonly clsColumnNames Column3 = new clsColumnNames("Alarms");

    private clsColumnNames(string value)
    {   Value = value;
    }
    public string Value { get; private set; }
}

第四种形式:

internal sealed class clsColumnNames
{
    public static readonly string Column1 = "Names";
    public static readonly string Column2= "Numbers";
    public static readonly string Column3= "Alarms";
}

谢谢!

4 个答案:

答案 0 :(得分:2)

private enum enumColumnNames 
{
    Names,         // integer value = 0
    Numbers,        // 1
    Alarms,         // 2
};

只要字符串值等于您可以使用的枚举名称     enumColumnNames.Names.ToString()将生成“Names”

答案 1 :(得分:0)

static class ColumnNames
{
    public const string Names  = "Names";
    public const string Number = "Numbers";
    public const string Alarms = "Alarms";
}

答案 2 :(得分:0)

由于这些是常量,我建议使用enum方法。正如Amorphis所提到的,这将使你得到字面值viw .ToString()。这也允许您通过使用enum类型作为参数来传递字符串作为参数框,并使用string类型作为参数,而不是int,它可能是也可能不是给定值之一。有一些方法可以解决这个问题(例如转换超出范围的{{1}}),但它比在任何地方传递原始字符串更不容易出错。

但是,并不是每当你有前置文本时,你应该使用资源(.resx),因为这允许你调整字符串的显示方式,具体取决于运行代码的机器的语言设置。如果用户看到任何这些字符串,请使用资源!

答案 3 :(得分:0)

第一种形式是最好的,原因如下:

  • 最简单
  • 少输入

第二种形式只会导致许多不必要的额外代码/输入(即enumColumnNames.Names.ToString(),只是为了得到你变量的值。我已经把手指伸出来只输了一次)

对于第三种形式,让我们分解它:

  • 由于您的变量是私有的
  • ,因此将类设为内部并未真正改变任何内容
  • 使课程密封只意味着课程不能继承;再次,这不会改变任何东西,因为你的变量是私有的
  • 使你的变量静态只意味着它们不会出现在类的对象中;再一次,没有真正做任何事情
  • 使变量只读只意味着它们只能在构造函数中设置
  • 拥有一个你想要保持不变的变量的属性是没有意义的;属性通常用于确保正确设置/获取变量

对于第4种形式,与第3种相同的抱怨,只是减去最后一次抱怨。

编辑: 由于你要问的这些特定变量应该是列名,我实际上会推荐Amorphis的答案(对不起Amorphis,我还没有足够的代表来支持你的答案)。如果您的全局变量彼此无关(即,网页名称的变量与文本字段中允许的字符数的变量相比很好且不相似),那么您应该使用第一个表单。 / p>