【发布时间】:2011-07-26 03:05:36
【问题描述】:
我想在我的一些属性的属性中使用string.Empty,但后来发现它实际上不是一个 Const 而是一个静态成员。
微软有什么理由这样做吗?
【问题讨论】:
-
只使用空字符串文字:
"" -
废话。没有看到重复的,它们通常会在您编写时出现。
我想在我的一些属性的属性中使用string.Empty,但后来发现它实际上不是一个 Const 而是一个静态成员。
微软有什么理由这样做吗?
【问题讨论】:
""
我会说在引用的程序集中使用 const 总是一个非常糟糕的主意。
原因是 C# 编译器将常量视为值而不是引用,正如我在 answer 中所说的那样。
我的意思是 C# 编译器将替换代码中常量的所有实例,并将“变量”替换为值。
这意味着即使您更新程序集 GlobalConstants.dll 并将其复制到您拥有的应用程序之一,您也需要重新编译该应用程序。不这样做,将导致应用程序使用旧的常量值。
要解决这个问题,您可以简单地使用 public static readonly 代替 public const,因为 readonly 修饰符与 const 的不同之处在于它被 C# 编译器视为代码中的引用而不是值。
【讨论】:
Math.PI 会发生变化的情况?
我认为原因是:字符串是引用类型,而不是值类型。并且比较两个引用(当你使用静态成员时)比比较两个字符串实例(当你使用 const 时)更快
【讨论】: