[英]C# class with array of classes
我上了下课;
public class Hotel
{
public int Id { get; set; }
public Room[] room { get; set; }
public class Room
{
public int RoomId { get; set; }
public int RoomTypeId { get; set; }
public string Name { get; set; }
}
}
我可以创建如下所示的类的实例,以便分配数据
Hotel oHotel = null;
oHotel = new Hotel ();
oHotel.Id = 100;
但是,如何为Room类创建一个子实例,我需要为Hotel类添加关联数据呢?
通过在其构造函数中为房间提供对酒店的引用。 但是酒店随后对房间一无所知,因此也要添加一个方法:
public class Hotel
{
public int Id { get; set; }
public List<Room> Rooms { get; set; }
public void AddRoom(Room room)
{
Rooms.Add(room);
}
}
public class Room
{
public Hotel Hotel { get; private set; }
public int RoomId { get; set; }
public int RoomTypeId { get; set; }
public string Name { get; set; }
public Room(Hotel hotel)
{
this.Hotel = hotel;
}
}
然后,您可以致电:
var hotel = new Hotel();
var room = new Room(hotel);
hotel.AddRoom(room);
public class Hotel
{
public int Id { get; set; }
public Room[] Rooms { get; set; }
public void AddRoom(int id, int typeID, string name)
{
Room room = new Room(id, typeID, name);
this.Rooms.Add(room);
}
public class Room
{
public int RoomId { get; set; }
public int RoomTypeId { get; set; }
public string Name { get; set; }
public Room(int id, int typeID, string name)
{
RoomID = id;
RoomTypeId = typeID;
Name = name;
}
}
}
客户代码:
Hotel oHotel = null;
oHotel = new Hotel ();
oHotel.Id = 100;
oHotel.AddRoom(1, 1, "Name1");
结合使用数组和对象初始化程序语法,您可以在一条语句中完成所有操作,这完全适合于实例化POCO。
var oHotel = new Hotel
{
Id = 100
room =
{
new Hotel.Room { RoomId = 1, RoomTypeid = 1, Name = "Name" }
}
};
如果要用多个房间初始化您的酒店,
var oHotel = new Hotel
{
Id = 100
room =
{
new Hotel.Room { RoomId = 1, RoomTypeid = 1, Name = "A" },
new Hotel.Room { RoomId = 2, RoomTypeid = 1, Name = "B" },
new Hotel.Room { RoomId = 3, RoomTypeid = 2, Name = "C" },
new Hotel.Room { RoomId = 4, RoomTypeid = 2, Name = "D" }
}
};
顺便说一句,您的
public Room[] room { get; set; }
属性,应该称为Rooms
。
如果您不想使用POCO(如您在问题中所显示的那样),我将像这样重写您的类,使其不可变,
public class Hotel
{
private readonly int id;
private readonly IList<Room> rooms;
public Hotel(int id; IEnumerable<Room> rooms)
{
this.id = id;
this.rooms = rooms.ToList();
}
public int Id
{
get { return this.id; }
}
public IEnumerable<Room> Rooms
{
get { return this.rooms; }
}
public class Room
{
private readonly int id;
private readonly RoomType type;
private readonly string name;
public Room(int id, RoomType type, string name)
{
}
public int Id
{
get { return this.id; }
}
public RoomType Type
{
get { return this.type; }
}
public string Name
{
get { return this.name; }
}
}
public enum RoomType
{
// Valid Room Types Here,
// ...
}
}
然后我会像这样实例化它
var oHotel = new Hotel(
100,
{
new Hotel.Room(1, Hotel.RoomType..., "A"),
new Hotel.Room(2, Hotel.RoomType..., "B"),
new Hotel.Room(3, Hotel.RoomType..., "C"),
new Hotel.Room(4, Hotel.RoomType..., "D")
});
仍然在一个语句中,但是更紧凑。 结果对象将是不可变的,这具有超出问题范围之外的许多好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.