我正在尝试将一些代码移植到.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的方式来解决这个问题(即标准做法),我宁愿选择这样做。
答案 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 ;