繁体   English   中英

内含班级清单的班级

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM