继承,如何在没有祖父母的情况下继承父类

时间:2015-08-31 13:59:50

标签: c# asp.net asp.net-web-api

我正在使用ASP.Net Web API 2并希望创建一些复杂的输入参数类。

我的库中有类

public class GrandParent
{
    public int Id {get;set;}
    public string GrandParentName {get;set;}
}
public class Parent : GrandParent
{
    public string ParentName {get;set;}
}

现在我只需要在我的子类中使用Parent类属性,而我正在这样做

public class Child : Parent
{
     public string ChildName {get;set;}
}

当我创建Child类的对象时,我只想要两个属性,即

Child objChild = new Child();
objChild.ParentName;
objChild.ChildName;

我不想要使用objChild的GrandParentName属性。有没有办法在继承结构中跳过祖父类,因为我想将此类作为API动作参数传递。

我感觉C#中缺少多重继承。

2 个答案:

答案 0 :(得分:2)

我可能会误解某些东西,但我认为你的遗产太过分了。您可以查看composite pattern

我认为你对每个对象的角色与彼此的比较和继承感到困惑。我不确定你是否需要所有这些课程。这就是我要做的事情:

interface IPerson
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ParentName { get; }
}

class Person : IPerson
{
    public int Id { get; set; }
    public string Name { get; set; }

    protected IPerson Parent { get; set; }

    public string ParentName { get { return this.Parent != null ? this.Parent.Name : String.empty; } }

    public Person(IPerson parent = null)
    {
        this.Parent = parent;
    }
}

一旦你拥有了这个,你就可以实现你想要的目标:

var grandParent = new Person();
var parent = new Person(grandParent);
var child = new Person(parent);

我希望我没有错过任何关键点:D。

答案 1 :(得分:0)

看起来,您可能需要将GrandParent从一个类更改为接口,然后这可能会起作用,如果您需要这些属性,只需创建实现接口的额外类。请记住,您可以在单个类上实现任意数量的接口。它们仍然有用于列表和内容的通用名称。

fharreau举了一个例子。

如果你想要更好的例子,你应该制作一些有关数据的数据图表。