C# 具有静态属性的静态类
我试图在一个类中收集应用程序中的所有字符串声明,以便在整个项目范围内轻松修改它们。我可以创建一个C# 具有静态属性的静态类,c#,.net,C#,.net,我试图在一个类中收集应用程序中的所有字符串声明,以便在整个项目范围内轻松修改它们。我可以创建一个Strings类,如下所示: public static class Strings { public static readonly string Title = "App Title"; } 或者像这样: public static class Strings { public const string Title = "App Title"; } 该类应该是静态的,并且所有属
Strings
类,如下所示:
public static class Strings
{
public static readonly string Title = "App Title";
}
或者像这样:
public static class Strings
{
public const string Title = "App Title";
}
该类应该是静态的,并且所有属性都是常量。
字符串的属性中是否包含静态只读
或常量
关键字有什么区别?您可以通过一个简单的示例来了解区别:
void Main()
{
var f = F.Foo;
var b = F.Bar;
}
public class F
{
public const string Foo = "F";
public static readonly string Bar = "B";
}
将产生以下IL:
IL_0001: ldstr "F"
IL_0006: stloc.0 // f
IL_0007: ldsfld UserQuery+F.Bar
IL_000C: stloc.1 // b
IL_000D: ret
Foo
的const
值在编译时被“烘焙”到调用站点,这就是为什么您看到值“F”本身的ldstr
,而static
字段发出ldsfld
,在运行时加载该字段,然后将其分配给局部变量b
将字段同时设置为static
和const
是编译时错误。const
和static
都是在类型而不是实例上定义的。更重要的是,可以在运行时设置static
字段,而const
必须在编译时已知
如果您想设置一组在运行时不会改变的常量值,那么使用const
就可以了。但是你必须记住,如果你改变了一个const
值,编译包含const的源代码是不够的,你还必须重新编译任何使用该const
的人。const
意味着静态,但是这种语言不允许同时使用这两个关键字。也许最大的区别是const
可以编译,而static const
不能编译。你的意思是“静态只读”
?你说的“集中所有字符串”是什么意思?谢谢,我不知道它不会编译。Visual Studio在我实际尝试构建之前没有指出任何错误。您可能希望研究使用资源字符串文件(.resx),特别是在将来可能需要本地化的情况下。