3

私の UI クラスでは、開発者は場所のプロパティ (System.Drawing.Point の型) を定義するオプションがあります。デフォルトでは、このプロパティは Point.Empty に初期化されます。クラスによってカプセル化された内部コードは、Point プロパティの .IsEmpty を使用して、場所が設定されているかどうかを判断します。プロパティが空でない場合、x/y 値が使用されます。空の場合、コードは行/列アルゴリズムで配置しようとします。

私の問題:
プロパティの .IsEmpty を使用して、設定されているかどうかを判断しています。驚いたことに、開発者がプロ​​パティを 0,0 に設定すると、空の状態になります。グラフィックスでは 0,0 のポイントが有効です。.IsEmpty が 0,0 値に対して true を返す理由も理解しています。

1) 独自のクラスを作成したり、System.Drawing.Point から継承したりせずに、プロパティが設定されているかどうかを知る方法はありますか?

私が考えることができる唯一のアイデアは、「新しいポイント(-1、-1)」の値でプロパティをデフォルトにし、それに対してテストすることです。より良い方法はありますか?そうでない場合は、確認してください。

Visual Studio 2005 および Visual Studio 2008 で C# を使用しています

ありがとう!

4

3 に答える 3

5

いくつかの方法があります:

  1. プロパティをnull可能なポイントにします。このように、設定していない場合は「null」になります
  2. プライベート Boolean フィールドを true に設定して、何かが setter メソッドを呼び出したかどうかを追跡します

すなわち。また:

public Point? Location { ... }

また:

public Point Location
{
    get ...
    set
    {
        _LocationSet = true;
        _Location = value;
    }
}
于 2009-11-20T21:10:09.913 に答える
2

フィールドをの代わりにPoint?(シンタックス シュガー for Nullable<Point>) のままにしPointます。それは基本的に、値がnull値であるかどうかを追跡します。プロパティをどのように公開するかはあなた次第です。Point設定せずに取得しようとすると、公開して例外をスローするか、設定してPoint?「設定解除」できるように公開することができます。後で再び null 。

Null 許容値型は、この種の状況に合わせて正確に設計されています。

于 2009-11-20T21:09:40.097 に答える
1

null 許容 Point: System.Drawing.Point の使用を検討するかもしれません。何かが設定されているかどうかを知るためのよりクリーンなパスを提供する Nullable。

于 2009-11-20T21:10:45.650 に答える