0

我目前正在尝试了解属性,并且我了解使用它们的好处,但我不知道如何在课堂上处理类。

示例

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
}

如果我不将私人房间设置为新的,我会得到空引用异常。这是一个好的做法,还是我应该像这样声明房间类。

public Rooms Rooms = new Rooms();

将“房间”类设为财产有什么意义吗?

4

4 回答 4

4

如果要针对该对象调用方法,则需要在某处将所有非静态类设置为对象的实例。

取决于您要初始化该对象的人。如果您希望使用您的班级的人来做这件事,请留下:

public Rooms Rooms {get;set;}

然后有人可以这样做:

Office o = new Office();
o.Rooms = new Rooms();

如果你想确保 Rooms 永远不会为空,只需在你的 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;
于 2013-09-12T07:18:02.733 回答
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();
    }
}
于 2013-09-12T07:21:17.000 回答
1

从我知道你正在尝试做的事情。一个办公室可以包含一个以上不同长度和宽度的房间,因此创建一个 Room 类,其结构将与您的 Rooms 类相似

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>()
 }
}
于 2013-09-12T07:23:06.330 回答
0

你可以通过两种方式做到这一点。如果您需要确保 Room 存在,请使用上面的代码或将其转换回自动属性

public Rooms Rooms{ get; set; }

并在构造函数中执行初始化。

编辑:如果您要公开成员,那么属性是有意义的。如果你只在你的班级中使用它,我会退回到普通的受保护/私人班级成员。

顺便一提。一个名为 Rooms 的类可能表明这里存在问题。一个类通常是单数的。当你包装一些东西时,我会建议 RoomCollection 作为包装类或简单的 IList 或 IEnumerable

于 2013-09-12T07:16:29.630 回答