2012-03-04 15 views
-3

私はC#の学習に取り組んでいます。私は私の本の例で問題に遭遇しました。 私はなぜそれが私の部屋のオブジェクトを設定するのかわかりません適切なLoactionsを終了するが、私のRoomWithDoor.Exitsをnullにします。だから、C#の継承が正しく動作していないようです

public Form1() 
      { 
       InitializeComponent(); 
       CreateObjects(); 
       MoveToANewLocation(livingRoom); 
      } 
      public void CreateObjects() 
      { 
       livingRoom = new RoomWithDoor("living room", "an antique carpet", "an oak door with a brass knob"); 
       livingRoom.Exits = new Locations[] { diningRoom, kitchen }; 
       livingRoom.DoorLocation = frontYard; 

       diningRoom = new Room("dining room", "crystal chandelier"); 
       diningRoom.Exits = new Locations[] { livingRoom, kitchen }; 

    abstract class Locations 
    { 
     public Locations(string name) 
     { 
      this.name = name; 
     } 
     public Locations[] Exits; 
     private string name; 
     public string Name { get { return name; } } 

class Room : Locations 
{ 
    public Room(string name, string decoration) 
     : base(name) 
    { 
     this.decoration = decoration; 
    } 
class RoomWithDoor : Room, IHasExteriorDoor 
{ 
    public RoomWithDoor(string name, string decoration, string doorDescription) 
     : base(name, decoration) 
    { 
     this.doorDescription = doorDescription; 
    } 

、これは

private void MoveToANewLocation(Locations newLocation) 
     { 
    currentLocation = newLocation; 
      currentLocationExit = currentLocation.Exits[0]; 
      MessageBox.Show(diningRoom.Name); 

に動作しますが、あなたはダイニングルームを初期化する前にこの用量はない

MessageBox.Show(livingRoom.Exits[0].Name); 
+2

'C#の継承が正しく機能していないようです。 'はい、バグです。 –

+1

継承は素晴らしいです。あなたの押し込みは、しかし、吸う。 –

答えて

4
livingRoom = new RoomWithDoor("living room", "an antique carpet", "an oak door with a brass knob"); 
livingRoom.Exits = new Locations[] { diningRoom, kitchen }; 
livingRoom.DoorLocation = frontYard; 

diningRoom = new Room("dining room", "crystal chandelier"); 
diningRoom.Exits = new Locations[] { livingRoom, kitchen }; 

するダイニングルームの参照を設定し、nullになります。 を割り当てた後に新しい値をdiningRoomに割り当てると、の値はdiningRoomになります。これはおそらくnullです。

1

あなたは、あなたのリビングルームの出口にダイニングルームを追加...

ダイニングルームとリビングルームの両方を作成し、作成したオブジェクトを使用して出口を設定します。あなたがnullオブジェクトへの参照であるために、出口を設定しますようEYは、あなたが期待するように、これは動作しません。新しいオブジェクト

関連する問題