2014-04-04 61 views
0

我刚接触OO-Stuff。我想要的是:带班级名单的班级

一个类,它包含一些属性和额外的类列表。这里的伪代码:

[用户]

  • [Firsname]

  • [姓氏]

  • [ “照片列表”]

    • [照片-1]

    • [图2]

    • [组图-N]

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

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

而我有一堂课“照片”:

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

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

+0

将'photos'类的名称更改为'photo'以获得清晰的代码。 – Amir

回答

2

使用List

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

注:photos不好命名,请重命名photosphoto

使用:

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

+0

很酷。以及如何将“照片”添加到列表以及如何检索第n张照片的文件名?我必须更改你的实现代码(枚举等)吗? –

+0

首先你应该创建实例,然后使用Add() –

+0

@Leparevilo你也可以在构造函数中使用新照片。 –

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; 
     } 
    } 
} 

如果你想延迟加载,则用户类应该是这样的:

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类之外的代码不能直接分配给照片的财产,这意味着现有的集合无法替代的。你只能从属性和添加,删除或任何其他收集。这就是集合属性在整个框架中的工作方式,例如DataSet.Tables,DataTable.Columns,DataTable.Rows,Control.Controls,ComboBox.Items,ListView.Items等等,并且列表继续。