不确定用哪种方式在C#中声明常量

本文关键字:声明 常量 方式 不确定 | 更新日期: 2023-09-27 18:27:06

我想知道如何为类声明一个"全局"变量。也就是说,我希望这个变量只在这个类中的任何地方都可用,而不是在其他类中。

申报它们的最佳形式是什么?或者我什么时候使用这些表格?我想要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
};

第三种形式:

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; }
}

第4种形式:

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

谢谢!

Cis

不确定用哪种方式在C#中声明常量

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

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

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

由于这些是常量,我建议使用enum方法。正如Amorphis所提到的,这将使您获得文字值viw .ToString()。这也允许您通过使用enum类型作为参数,而不是string(可能是也可能不是给定值之一),将字符串作为装箱到给定值的参数进行传递。有一些方法可以解决这个问题(例如转换超出范围的int),但它仍然比到处传递原始字符串更不容易出错。

然而,也不是说,每当你有正面文本时,你都应该使用Resource(.resx),因为这允许你根据运行代码的机器的语言设置来调整字符串的显示方式。如果用户看到这些字符串中的任何一个,请使用资源!

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

  • 最简单的
  • 更少的打字

第二种形式只会导致大量不必要的额外代码/键入(例如,enumColumnNames.Names.ToString(),只是为了获得变量的值。我只打字一次就把手指累坏了)。

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

  • 使类内部化并不会真正改变任何事情,因为您的变量是私有的
  • 使类密封只是意味着该类不能从继承;同样,这不会改变任何事情,因为您的变量是私有的
  • 将变量设为静态只意味着它们不会出现在类的对象中;再说一遍,什么都没做
  • 使变量只读只是意味着它们只能在构造函数中设置
  • 为一个变量设置一个你想要保持不变的属性是没有意义的;属性通常用于确保正确设置/获取变量

对于第四个形态,和第三个形态一样,只是减去最后一个形态。

编辑:由于您询问的这些特定变量应该是列名,因此我实际上建议您使用Amorphis的答案(对不起,Amorpis,我还没有足够的代表来支持您的答案)。如果您的全局变量彼此无关(即,网页名称的变量与文本字段中允许的字符数的变量既好又不一样),那么您应该使用第一种形式。