4

私のプロジェクトの1つに、ビデオ形式のカスタム識別子文字列を表す値の型/構造体があります。この場合、コンテンツタイプの文字列が含まれますが、それは異なる場合があります。

構造体を使用したので、渡されたときに強く型付けでき、初期の文字列値に対して健全性チェックを実行できます。

public struct VideoFormat {
    private string contentType;

    public VideoFormat(string contentType) {
        this.contentType = contentType;
    }

    public string ContentType {
        get { return this.contentType; }
    }

    public override string ToString() {
        return this.contentType;
    }

    // various static methods for implicit conversion to/from strings, and comparisons
}

非常に一般的な形式がいくつかあるため、これらをデフォルト値の静的読み取り専用フィールドとして公開しました。

public static readonly VideoFormat Unknown = new VideoFormat(string.Empty);
public static readonly VideoFormat JPEG = new VideoFormat("image/jpeg");
public static readonly VideoFormat H264 = new VideoFormat("video/h264");

共通の値を静的な読み取り専用フィールドとして公開するか、取得専用プロパティとして公開する方がよいでしょうか。後で変更したい場合はどうすればよいですか?.Net Framework全体で使用されている両方のメソッドが表示されます。たとえばSystem.Drawing.Color、静的な読み取り専用プロパティを使用しSystem.String、の静的な読み取り専用フィールドとString.EmptySystem.Int32の定数を使用しMinValueます。

(ほとんどの場合、この質問からコピーされますが、より具体的で直接関連のない質問が含まれます。)

4

1 に答える 1

2

決して変更されないものを宣言しない限り、プロパティは良い考えです。

プロパティを使用すると、ライブラリを消費するプログラムに影響を与えずに内部実装を変更し、変更/バリエーションを処理できます。プログラムの消費は中断せず、再コンパイルする必要もありません。

例(これは悪い例ですが、あなたはその考えを理解します。)

public static VideoFormat H264Format
{
   get{
         // This if statement can be added in the future without breaking other programs.
         if(SupportsNewerFormat)
             return VideoFormat.H265;

         return VideoFormat.H264;
    }
}

また、将来フィールドをプロパティに変更することにした場合は、コードの中断を消費することにも注意してください。

于 2013-03-18T23:50:46.173 に答える