const与Func<string>的区别

3
在类中使用const和Func有何优劣之处或区别?
public sealed class Constants {
  private Constants() {}
  public const string SOME_STRING = "Some String";
  public static Func<string> SomeString = () => "Some String";
}


Debug.WriteLine(Constants.SOME_STRING);
Debug.WriteLine(Constants.SomeString());

1
我甚至从未考虑过将Func用作const的替代品。我认为使用只读属性是一个有效的替代方案。 - Uwe Keim
不要忘记 readonly 值。 - Jeff Mercado
如果你想要一个类似于const的东西,但又能够在以后更改它的值,那么请使用public static readonly而不是Func。 - Justin Pihony
4个回答

4

在编译时,Constants.SOME_STRING将被替换为其实际值'Some String',并且编译将继续进行,就好像使用字面值一样。

对SomeString()的调用仍将导致对静态方法的堆栈调用。


1
它不会被内联吗? - bhamlin

3

常量不需要被计算,因此会带来轻微的性能提升。如果您确定该字符串永远不需要更改,请使用常量。

如果您认为该值可能需要在将来某个时候通过一些逻辑产生,或者它可能会在一个产品版本到下一个版本发生变化,请尝试使用属性。它可以给你与 Func<> 相同的灵活性,但允许你使用不暗示其他可能性的语法。

public string SomeString {get {return "Some String";}}

2

常量在代码中被引用时会被替换为它们的值,因此速度更快。在代码中创建Func并调用它将增加函数调用并降低性能。


2

根据你所展示的内容,使用 const,这样可以更加清晰表达你的意图。

Func 只是一个表示函数的对象。你似乎不需要一个函数,为什么要使用它呢?直接访问会更加简单易懂,大多数人也会期望如此。如果我看到有人使用 Func,我一定会做出反应。


我认为const在意图方面是最明显的,而另一种方式对我来说就像是逆行牙科手术。 - Mr. Mr.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接