创建多个对象具有相同属性的对象

时间:2014-05-14 06:47:52

标签: c#

我的程序开始变得非常大。我发现它开始在多个领域做同样的事情。 我试图找出如何使其更有效率。

所以我有一个看起来像这样的对象

    public class TreeViewNode
    {
        public TreeViewNode()
        {
            Children = new ObservableCollection<TreeViewNode>();
        }
        public String Name { get; set; }
        public string Description { get; set; }
        public ObservableCollection<TreeViewNode> Children { get; set; }
    }

我还有另一个看起来像这样的对象;

public class ComputerObject
{
    public String Name { get; set; }
    public Int32 UUID { get; set; }
    public DateTime Created { get; set; }
    public ObservableCollection<Object> Children { get; set; }
}

这两个项目都需要具有一些相同的属性.. 目前他们都有儿童财产和姓名财产。但他们都需要添加一些其他常见属性。

所以我尝试过这样的事情。

    public class BaseObject
    {
        public String Name { get; set; }
        public ObservableCollection<Object> Children { get; set; }
        public string Description { get; set; }
        public BaseObject()
        {
            Children = new ObservableCollection<object>();
        }
    }
    public class ComputerObject: BaseObject
    {
        public Int32 UUID { get; set; }
        public DateTime Created { get; set; }            
    }
    public class TreeViewNode: BaseObject
    {
        public String IconPath { get; set; }

    }

现在这只是我正在实现的内容的缩减版本,我有很多共享相同属性的对象。还有一些不混和搭配。我无法弄清楚最好的建议。

我的对象变得非常混乱,当我重命名一个属性时,我发现我必须在几个区域重命名它,这不是它的方式。

有人可以建议我如何实现共享相同属性名称的多个对象吗?

2 个答案:

答案 0 :(得分:0)

我会研究装饰模式。简而言之,您不通过继承共享公共属性。您创建包含公共属性的类,并将这些类用作最终类中的属性。

编辑:示例实际上只是一个标准的组合,它应该可以工作

E.G。

public class Decorator1
{
    public String Name { get; set; }
    public ObservableCollection<Object> Children { get; set; }
    public string Description { get; set; }
}

public class Decorator2
{
    public long Id { get; set; }
}

public class ClassA
{
    public Decorator1 TreeNodeImpl;
}

public class ClassB
{
    public Decorator1 TreeNodeImpl;
    public Decorator2 LongIdImpl;
}

答案 1 :(得分:0)

在我看来,当这些子类彼此不相关时(例如@Sriram Sakthivel要求Animal&lt; Dog,Cat)只是为了共享相同的属性,你不应该让类从一个基类继承。

你应该确定哪些类是相关的(猫,狗是动物;汽车,摩托车是车辆),然后根据这些“分组”创建基类。