我是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张照片?
答案 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等等,列表继续。