如何创建一个属性是另一个类的集合?

时间:2010-11-14 17:02:50

标签: c#

我有Client,Project和Task的课程。

每个客户端包含多个项目。 每个项目包含多个任务。

在数据库中每个都有一个ID字段,项目表有一个clientid字段。 此外,Tasks表有一个projectid字段。

有人可以帮我解决这个问题吗?所以我可以让每个人都上课吗?

2 个答案:

答案 0 :(得分:2)

这是:

public class Client
{
    public int Id {get;set;}
    // Client Properties

    private List<Project> _projects = new List<Project>();
    public List<Project> Projects { get { return _projects; } }
}

public class Project
{
    public int Id { get; set; }
    public int ClientId { get; set; }

    // Project Properties

    private List<Task> _tasks = new List<Task>();
    public List<Task> Tasks { get { return _tasks; } }
}

public class Task
{
    public int Id { get; set; }
    public int ProjectId { get; set; }

    // Task Properties
}

答案 1 :(得分:0)

您需要创建一个集合类型的属性,例如List<Project>

但是 - 有一个决定:任何外部类都可以直接从Projects集合属性中添加或删除项目,还是外部类只能读取集合?

如果任何其他类可以完全访问“项目”列表,则需要选择列表将显示为的外部类型。根据您希望其他类能够执行的操作,将IList<Project>ICollection<Project>公开可能是个好主意。

如果其他类可以自由访问该列表,您可能希望将其公开为IEnumerable<Project>,以便他们所能做的就是遍历列表。此外,如果没有其他类可以直接访问,那么您将不得不向Client类添加方法以允许添加和/或删除项目。

通过仅允许基于接口的外部访问项目列表,您可以自由地将基础数据结构更改为另一个兼容的数据结构,而不会破坏任何其他代码。例如,如果属性是IEnumerable<Project>,则可以将内部代码从List<Project>更改为数组(Project[]),而其他代码无需知道。