Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有静态属性的静态类_C#_.net - Fatal编程技术网

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),特别是在将来可能需要本地化的情况下。