以下に示すようなクラスがあると考えてください
public class Hotel
{
public List<Room> lstRooms;
public List<Room> objLstRoom = new List<Room>();
}
このホテルクラスのオブジェクトを作成すると、
- そのオブジェクトのこれら2つの変数の違いは何でしょうか?
- リストは最初は空なので、何が保存されていたでしょうか。
最初のものはnull
です。2つ目はそうではありません。
メンバーに何も割り当てない場合、デフォルト値が割り当てられるため、次のように記述します。
public class Hotel
{
public List<Room> lstRooms = default(List<Room>);
public List<Room> objLstRoom = new List<Room>();
}
参照型の場合、デフォルトはnull
。であるため、最初の変数はになりnull
ます。
他のリストについては、あなたが言ったように、それは初期化されますが、空のままになります。
lstRooms
は空のリストですnull
。objLstRoom
アクセスlstRooms
すると、null参照例外が発生します。
List<Room> lstRooms
null
となるだろうList<Room> objLstRoom = new List<Room>()
空のリストになりますしたがって、最初のホテルは部屋が0のホテルになり、2番目のホテルは部屋が定義されていないホテルになります。
でインスタンスメソッドを呼び出すnull
List
と、クラッシュが発生します。
int count = lstRooms.Count; // crash because lstRooms is null
しかし
int count = objLstRoom.Count; // => 0
では、何が良いのでしょうか?私はいつも空のリストを好みます。
これは最悪だから:
if(hotelInstance.objLstRoom != null)
{
foreach(va room in hotelInstance.objLstRoom)
/* .... */
}
これの方が良い
foreach(va room in hotelInstance.objLstRoom)
/* .... */
lstRooms
nullにobjLstRoom
なり、空List<Room>
になり、要素はありません。
これは、たとえば、lstRooms.Add(new Room())
null参照例外をスローし、正常に機能することを意味しますobjLstRoom.Add(new Room)
。
あなたのコードは以下と同等です:
public class Hotel
{
public List<Room> lstRooms;
public List<Room> objLstRoom;
public Hotel()
{
objLstRoom = null; // Default initialization in .NET
objLstRoom = new List<Room>()
}
}
What would be the difference between these two variables in that object?
にlstRoom
なりますnull
、にobjLstRoom
なりますempty list
。
Since list would be empty initially, what would have been stored in it?
どちらもlstRoom
、またはobjLstRoom
何も保存されません。
public class Hotel
{
public List<Room> lstRooms; // null
public List<Room> objLstRoom = new List<Room>(); // empty list
}
あなたの質問に答えるには:
そのオブジェクトのこれら2つの変数の違いは何でしょうか?
lstRoomsはnullになり、objLstRoomは空のリストになります。
リストは最初は空なので、何が保存されていたでしょうか。
何も保存されていません。
私はいつもそれを箱として考えようとしました。
public List<Room> lstRooms;
空のボックスもそうです。部屋のオブジェクトのリストを収めるのに十分なスペースがありますが、実際にはリストは含まれていません。(まだ)
public List<Room> objLstRoom = new List<Room>();
すでにルームリストが入っているボックスです。コンストラクターが呼び出されますが、これはかなり大きな違いです。
最初の例では、リストへの参照を作成しています。ポインタのようですが、2番目の例では実際にリストを作成しています。
lstRooms.Add(new Room());
新しい部屋を追加するオブジェクトが存在しないために、割り当てられていない変数エラーが発生するようなものを呼び出そうとすると。一方、objLstRoom.Add(new Room()); うまく動作します。