日期:2014-05-17  浏览次数:20928 次

当前实例如何获取父实例的属性
比如
C# code

    class a {
        public int Data { get; set; }
        public string Name { get{如何在这里获取父实例的Name属性????} }
    }
    class b{
        public List<a> DataList { get; set; }
        public string Name { get; set; }
}



谢谢!

------解决方案--------------------
你这不是继承关系

所以

你要么在a里放委托,b里实现这个委托。当然这个解耦合性比较高

要么就是另外的解耦。b里不直接使用List,而是使用ObservableCollection<T> 私有set方法
同时 CollectionChanged事件,直接接管集合的添加,修改过程。把name直接赋值给item

其实你看看微软怎么办的。实际上这东西在设计模式里面要组合模式

而微软本身也大量使用这个模式。control类就是典型。而每个contorl都有一个parent属性,而Contorl.Contorls 则是一个继承与 CollectionBase类的集合对象(为啥要继承这个,因为和你的要求一样,微软需要去接管列表添加修改过程,动态给每个item的parent属性赋值)
------解决方案--------------------
它们不是继承关系,不能用父子来形容,要获得就在 a 中保存包含它的 b 的实例的引用,比如通过构造函数的方式
C# code
class a
{
    public a(b _b)
    {
        this.owner = _b;
    }
    private b owner;
    public int Data { get; set; }
    public string Name { get { return this.owner.Name; } }
}
class b
{
    public List<a> DataList { get; set; }
    public string Name { get; set; }
}