「定数」の初期化されたプロパティ/フィールドがいくつかあり、次の行のどれを使用するのが最適かを知りたい:
public static Color MyColor { get { return Color.Red; } }
public static readonly Color MyOtherColor = Color.Red;
(lazy)initialization 後に実行時の違いはありますか? パフォーマンスの使用方法は異なりますか?
それらが定数の場合は、定数を使用します。
public const Color MyColor = Color.Red;
質問への回答として、msdnフォーラムでよく読んでください:メモリ消費:静的フィールドと静的プロパティ
編集:
Joeがコメントで指摘したように、Color
これはコンパイル時定数ではないため、定数として宣言することはできません。
この質問に対するより良い答えはジョーによって答えられます。
結局、静的な読み取り専用フィールドとプロパティの使用に目立った違いはありません。状況に最も適したものを使用してください。
フィールド使用ガイドラインでは、事前定義されたオブジェクト インスタンスに 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