以下に示すようなクラスがあると考えてください
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> lstRoomsnullとなるだろう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)
/* .... */
lstRoomsnullに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()); うまく動作します。