2012-08-02 96 views
3

在类中使用const或Func有什么好处或不同?const vs Func <string>

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'替代品。我认为使用r/o属性将是一个有效的替代品。 – 2012-08-02 16:04:33

+0

不要忘记'readonly'值。 – 2012-08-02 16:05:42

+0

如果你想要一个接近const的东西,但是稍后能够改变它的好处,使用'public static readonly'而不是Func – 2012-08-02 16:05:53

回答

2

对于您所显示的内容,请使用const。你的意图是明确的。

A Func只是一个函数,表示为一个对象。你好像需要一个函数,那么为什么要用一个呢?直接访问更容易理解,更多的人会期望它。如果我看到Func的用法,我肯定会采取双重做法。

+0

认为const在意图方面最明显,其他方式让我感觉像通过你的屁股做牙科治疗。 – 2012-08-02 16:06:57

4

在编译时,Constants.SOME_STRING将被它的实际值'Some String'替换,并且编译将像使用文字一样继续。

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

+1

它会被内联的机会不是很高? – bhamlin 2012-08-02 16:04:57

3

该常数不需要进行评估,因此会带来轻微的性能提升。如果你确定这个字符串不需要改变,使用一个常量。

如果您认为该值可能需要在某个时间点由某些逻​​辑生成,或者可能会从一个产品版本更改为下一个,请尝试使用属性。它具有与Func<>相同的灵活性,但允许您使用不暗示可能具有其他效果的语法语法。

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

在代码中引用常量时,它们的值会被引用,以便它们更快。制作一个Func并在代码中调用它会增加函数调用并降低性能

相关问题