[英]Class with list of class within
我是OO材料的新手。 我想要的是跟随:
一个类,其中包含一些属性和其他类列表。 这里是伪代码:
[用户]
[名字]
[姓]
[“照片清单”]
[照片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张照片?
使用清单 :
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)
此外命名,你可以使用这个 。
集合属性几乎通常应该是只读的。 因此,您的类应如下所示:
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属性,这意味着无法替换现有的收藏集。 您只能从属性和“添加”,“删除”或任何其他内容中获取集合。 这就是集合属性在整个Framework中的工作方式,例如DataSet.Tables,DataTable.Columns,DataTable.Rows,Control.Controls,ComboBox.Items,ListView.Items等,然后列表继续进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.