字符串,长整数和类作为属性

时间:2013-09-12 07:13:23

标签: c# properties

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

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”作为属性?

4 个答案:

答案 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