包含类列表的类

时间:2014-04-04 06:32:22

标签: c#

我是OO-Stuff的新手。我想要的是:

一个类,包含一些属性和其他类列表。这里有一个伪代码:

[用户]

  • [Firsname]

  • [姓氏]

  • [“照片列表”]

    • [照片-1]

    • [照片-2]

    • [照片-N]

我定义了一个“用户”类(没有我的“照片列表”):

public class user
{
    string Firstname { get; set; }
    string Lastname { get; set; }
}

我有一个班级“照片”:

public class photos
{
    string filename { get; set; }
    datetime timestamp { get; set; }
}

如何将“照片”放入用户,以便我可以添加和检索用户的n张照片?

2 个答案:

答案 0 :(得分:2)

使用List

public class user
{
    string Firstname { get; set; }
    string Lastname { get; set; }
    List<photos> photos{get;set;}
}

注意:photos不适合命名,请将photos重命名为photo

使用:

var u=new user();
u.photos=new List<photos>();
u.photos.Add(//add photo)

您也可以使用:

public class user
{
    string Firstname { get; set; }
    string Lastname { get; set; }
    List<photos> photos{get;set;};
    public User()
    {
         photos= new List<photos>();
    }
}

和使用:

var u=new user();
u.photos.Add(//add photo)

同样,对于命名,您可以使用this

答案 1 :(得分:0)

集合属性几乎普遍应该是只读的。因此,您的课程应如下所示:

public class Photo
{
    public string FileName { get; set; }

    public DateTime TimeStamp { get; set; }
}

public class User
{
    private readonly List<Photo> _photos = new List<Photo>();

    public string GivenName { get; set; }

    public string FamilyName { get; set; }

    public List<Photo> Photos
    {
        get
        {
            return this._photos;
        }
    }
}

如果你想延迟加载,那么User类应如下所示:

public class User
{
    private List<Photo> _photos;

    public string GivenName { get; set; }

    public string FamilyName { get; set; }

    public List<Photo> Photos
    {
        get
        {
            return this._photos ?? (this._photos = new List<Photo>());
        }
    }
}

您也可以取消该字段并使用私人设定器:

public class User
{
    public string GivenName { get; set; }

    public string FamilyName { get; set; }

    public List<Photo> Photos { get; private set; }

    public User()
    {
        this.Photos = new List<Photo>();
    }
}

在每种情况下,User类之外的代码都不能直接分配给Photos属性,这意味着无法替换现有的集合。您只能从属性和Add,Remove等获取集合。这就是集合属性如何在整个框架中发挥作用,例如: DataSet.Tables,DataTable.Columns,DataTable.Rows,Control.Controls,ComboBox.Items,ListView.Items等等,列表继续。