0

「定数」の初期化されたプロパティ/フィールドがいくつかあり、次の行のどれを使用するのが最適かを知りたい:

  1. public static Color MyColor { get { return Color.Red; } }
  2. public static readonly Color MyOtherColor = Color.Red;

(lazy)initialization 後に実行時の違いはありますか? パフォーマンスの使用方法は異なりますか?

4

3 に答える 3

3

それらが定数の場合は、定数を使用します。

public const Color MyColor = Color.Red;

質問への回答として、msdnフォーラムでよく読んでください:メモリ消費:静的フィールドと静的プロパティ

編集

Joeがコメントで指摘したように、Colorこれはコンパイル時定数ではないため、定数として宣言することはできません。

この質問に対するより良い答えはジョーによって答えられます。

結局、静的な読み取り専用フィールドとプロパティの使用に目立った違いはありません。状況に最も適したものを使用してください。

于 2012-06-05T14:34:29.757 に答える
1

フィールド使用ガイドラインでは、事前定義されたオブジェクト インスタンスに public static read-only フィールドを使用することを推奨しています。例えば:

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 を使用すると、次のコードが表示されます。} }

上記のリンクのガイドライン (例として Color を使用) は .NET 1.1 用であり、進化している可能性があります。個人的には、プロパティを使用しても問題はないと思います。 .NET 4.0 フィールド ガイドラインも同様ですが、事前定義されたオブジェクト インスタンスの例としてDateTime.MaxValueとを使用します。DateTime.MinValue

于 2012-06-05T14:50:05.837 に答える