我目前正在尝试了解属性,并了解使用它们的好处,但我不知道如何在课堂上处理类。
Se示例
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
}
如果我没有将私人房间设置为新房间,我将获得nullreference exeception。这是一个好的做法,或者我应该只是宣布这样的房间类。
public Rooms Rooms = new Rooms();
是否有必要将“Rooms”作为属性?
答案 0 :(得分: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;
答案 1 :(得分: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();
}
}
答案 2 :(得分:1)
来自wat i percieve你正在努力做到。办公室可以包含多个不同长度和宽度的房间,因此房间类别的结构将与您的房间类别相似
public class Room
{
public long Identifier { get; set; }
public double Width { get; set; }
public double Length { get; set; }
//and so on
}
然后在办公室类中将属性作为房间列表
public class office
{
public List<Room> Rooms{get; set;}
public Office()
{
Rooms = new List<Room>()
}
}
答案 3 :(得分:0)
你可以用两种方式做到这一点。如果您需要确保存在Rooms,那么请使用上面的代码或将其转换回自动属性
public Rooms Rooms{ get; set; }
并在构造函数中执行初始化。
编辑:如果您正在公开该成员,那么属性是有意义的。如果你只在课堂上使用它,我会回到普通的受保护/私人班级成员。
顺便说一下。名为Rooms的类可能会在此处指出问题。一个班级通常是单数。当你包装东西时,我会建议将RoomCollection作为包装类或简单地使用IList或IEnumerable