0

私は現在、プロパティについて学習しようとしています。それらを使用する利点は理解していますが、クラスでクラスを処理する方法がわかりません。

例を参照

public class Office
{

    public long Identifier { get; set; }
    public string Address { get; set; }
    public long EmployesCount { get; set; }

    public Rooms Rooms
    {
        get { return _rooms; }
        set { _rooms = value; }
    }

    private Rooms _rooms = new Rooms();
}

public class Rooms
{
    public long Identifier { get; set; }
    public double Width { get; set; }
    public double Length { get; set; }
    //and so on
}

プライベート ルームを new に設定しないと、nullreference 例外が発生します。これは良い習慣ですか、代わりにこのように部屋のクラスを宣言する必要があります。

public Rooms Rooms = new Rooms();

クラス「Rooms」をプロパティにするポイントはありますか?

4

4 に答える 4

4

オブジェクトに対してメソッドを呼び出す場合は、すべての非静的クラスをオブジェクトのインスタンスに設定する必要があります。

そのオブジェクトを誰が初期化するかによって異なります。あなたのクラスを使用している人にそれをさせたい場合は、そのままにしておきます:

public Rooms Rooms {get;set;}

次に、誰かが行うことができます:

Office o = new Office();
o.Rooms = new Rooms();

Rooms が null にならないようにしたい場合は、Office コンストラクターで初期化するだけです。

public Office() {
  this.Rooms = new Rooms();
}

public Rooms Rooms {get;set;}

上記の場合、次を使用できます。

Office o = new Office();
// Rooms will be initialized when we first use it
o.Rooms.Length = 15;
于 2013-09-12T07:18:02.733 に答える
1

コンストラクターを使用して、設定されていない可能性のあるプロパティを初期化します。そうすれば、次の自動プロパティを引き続き使用できますRooms

public class Office {
    public long Identifier { get; set; }
    public string Address { get; set; }
    public long EmployesCount { get; set; }

    public Rooms Rooms { get; set; }

    public Office() {
      this.Rooms = new Rooms();
    }
}
于 2013-09-12T07:21:17.000 に答える
0

あなたは2つの方法でそれを行うことができます. ルームが存在することを確認する必要がある場合は、上記のコードを使用するか、自動プロパティに変換してください

public Rooms Rooms{ get; set; }

コンストラクタで初期化を実行します。

編集:メンバーを公開している場合、プロパティは理にかなっています。クラスでのみ使用している場合は、プレーンな保護/プライベート クラス メンバーにフォールバックします。

ところで。部屋と呼ばれるクラスは、ここで問題を示している可能性があります。クラスは通常、単数です。何かをラップするときは、RoomCollection をラッパー クラスとして、または単に IList または IEnumerable にすることをお勧めします。

于 2013-09-12T07:16:29.630 に答える