1

私はライブラリの設計を構築していますが、C# に慣れていないため、構造体 (値の型) を作成して内部で管理したいと考えていました。つまり、誰かが上記の構造に値を割り当てると、(この例では) 値の長さを検証し、値のサニテーションを行います (つまり、 ,etc. に変わりwhitespaceますunderscores)。

それは、私が見落としている値を制御することです。通常のクラスの場合、割り当てにイベントを添付してすべての検証を実行するだけですが、作成するオブジェクトの目的に対してクラスが過剰になるため、structオブジェクトが最適であると考えました.

構造設計、おそらくきれいではありませんが、これまでのところ:

public struct ST_Keytip
{
    private string _value;

    [DefaultProperty]
    public string FooBar
    {
        get { return this._value; }
        set
        {
            if (len(value) < 1 or len(value) > 3)
            {
                throw new exception("blah blah blah....PUKE!!!!")
            }
            else
            {
                this._value = value;
            }
        }
    }
}

クリーンな C# 設計ではないと確信していますが、それがクラス オブジェクトであった場合に私が行ったであろうことです。基本的に、インスタンス化する必要はなく(したがって、クラスを使用しなかった理由)、値を保持する必要があります。値の検証を構造体にアタッチできるかどうかを知りたいのですが、できる場合はどうすればよいですか? そうでない場合、割り当てられる値に制限がある値型を持つための最良のアプローチは何でしょうか?

4

1 に答える 1

6

可変構造体は悪です。疫病のようにそれらを避けるべきです。

原則として、説得力のある理由/必要性があり、構造体を使用した場合のすべての結果を十分に認識している場合にのみ、クラスに対して構造体を使用することをお勧めします。

あなたの場合、オブジェクトが小さいという事実にもかかわらず、それはクラスでなければなりません。

于 2012-12-27T20:51:41.413 に答える