2014-04-04 164 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等等,並且列表繼續。