静态属性或静态只读字段

时间:2012-06-05 14:32:33

标签: c# .net static readonly

我有一些“常量”的初始化属性/字段,我想知道以下哪一行是最好用的:

  1. public static Color MyColor { get { return Color.Red; } }
  2. public static readonly Color MyOtherColor = Color.Red;
  3. (延迟)初始化后是否存在一些运行时差异? 性能是否有所不同?

2 个答案:

答案 0 :(得分:3)

如果它们是常量,那么使用常量:

public const Color MyColor = Color.Red;

回答这个问题,这是msdn论坛上的一个很好的阅读:Memory consumption: static fields vs static properties

修改

正如Joe在评论中指出的那样,Color不能被声明为常量,因为它不是编译时常量。

乔回答了better answer这个问题。

最后,使用静态只读字段与属性之间没有明显区别。根据情况使用最适合的任何东西。

答案 1 :(得分:1)

Field usage guidelines建议对预定义对象实例使用公共静态只读字段。例如:

public struct Color
{
    // this is a predefined immutable instance of the containing Type
    public static readonly Color Red = new Color(0x0000FF);

    ...
}

在你的情况下,我可能会使用一个属性:

public class MyClass
{
    // Not a predefined instance of the containing Type => property
    // It's constant today, but who knows, tomorrow its value may come from a 
    // configuration file.
    public static Color MyColor { get { return Color.Red; } }
}

<强>更新

  

当我看到你的答案时,它非常清楚,但在System.Drawing中使用ILSpy会向我显示以下代码:public static Color Red {get {return new Color(KnownColor.Red); }}

上面链接的指南(使用Color作为示例)适用于.NET 1.1,并且可能已经发展。我个人认为你不会因使用房产而出错。 .NET 4.0 Field Guidelines类似,但使用DateTime.MaxValueDateTime.MinValue作为预定义对象实例的示例。