如何在.net命名空间中共享常量值?

时间:2009-11-20 10:23:28

标签: .net c++-cli namespaces

我正在尝试将一些代码移植到.net中,其中包含#defined'd值,例如

#define MY_CONSTANT       (512)
#define MY_VERSION_STRING "v42.2"

当我导入cli库时,#define会丢失。有没有一种方法可以在命名空间的范围内定义常量。我在想这样的事情:

namespace MyNamespace
{
    const int MY_CONSTANT = 512;
    const String^ MY_VERSION_STRING = "v42.2";
}

因此,将来我可以将其称为:

int myVar = MyNamespace::MY_CONSTANT;
String^ myVar = MyNamespace::MY_VERSION_STRING;

[编辑] 有些常量是字符串,因此枚举不会解决一般情况。

[Edit2] 我在这里使用C ++ / CLI,现在与其他.net语言的互操作性不是优先事项。也就是说,如果有一种更像.net的方式来解决这个问题(即标准做法),我宁愿选择这样做。

4 个答案:

答案 0 :(得分:2)

您可以定义一个包含公共字段的静态类,例如。

namespace MyNamespace
{
    public class Constants
    { 
        public static int MyConstant1 { get { return 512; } }
        public static int MyConstant2 { get { return 1024; } }
    }
}

然后您可以使用Constants.MyConstant1代替MY_CONSTANT。

请注意,拥有“通用”常量类是一种“不良做法”:犹太教的方法是在类中保留与其定义相关的相关常量,例如。如果你有一个使用MaxBufferSize常量的FileParser类,你将定义一个静态FileParser.MaxBufferSize常量。

答案 1 :(得分:0)

如果有多个相关值,通常最好使用枚举。否则,将它们挂在课堂上,例如:

public static class ConstantStuff
{
   public const int MyConstant = 512;
   public const int SomethingElse = 42;
}

C#不允许“裸”常量。

答案 2 :(得分:0)

我相信如果你把它们放在命名空间范围内,那么它们可能无法被C#应用程序访问,如果这对你很重要 - 最好将它们包装在ref类中。

答案 3 :(得分:0)

您无法在命名空间内声明常量。您需要定义一个容器来放置您的consts,如类,结构或枚举。

public static class MyConstants
{
    public const float ConstantValue1 = 0;
}

并像这样引用它们:

float value = MyConstants.ConstantValue1 ;