C# 继承,如何在没有祖辈的情况下继承父类

C# 继承,如何在没有祖辈的情况下继承父类,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我正在使用ASP.NETWebAPI2,希望创建一些复杂的输入参数类 我在我的图书馆里也有课 public class GrandParent { public int Id {get;set;} public string GrandParentName {get;set;} } public class Parent : GrandParent { public string ParentName {get;set;} } 现在我只需要在我的子类中使用父类属性,我正

我正在使用ASP.NETWebAPI2,希望创建一些复杂的输入参数类

我在我的图书馆里也有课

public class GrandParent
{
    public int Id {get;set;}
    public string GrandParentName {get;set;}
}
public class Parent : GrandParent
{
    public string ParentName {get;set;}
}
现在我只需要在我的子类中使用父类属性,我正在这样做

public class Child : Parent
{
     public string ChildName {get;set;}
}
当我创建子类的对象时,我只需要两个属性,它们是

Child objChild = new Child();
objChild.ParentName;
objChild.ChildName;
我不想在objChild中使用祖父母名属性。有没有办法跳过继承结构中的父类,因为我想将这个类作为API操作参数传递


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

我可能误解了一些东西,但我认为你在继承方面走得太远了。你可以去看电视

我认为你对每个对象的角色、相互比较和继承感到困惑。我不确定你是否需要所有这些课程。下面是我要做的:

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.

看起来,您可能需要在不同的类之间更改您的祖父母,然后这可能会起作用,如果您需要这些属性,只需创建实现接口的额外类即可。请记住,您可以在单个类上实现所需的任意多个接口。而且它们在列表和其他东西中仍然有共同的名称

法罗举了一个例子


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

你可以看看组合而不是继承我会问自己孩子是否有父母或是父母。可能重复我建议你解释实际的域名,而不是样本名,这不仅仅是一个语言问题,更是一个设计问题,通过称它们为孩子、父母和祖父母,你强迫自己认为这就是这些物体之间的关系,但事实是,你目前的问题表明它们可能根本不是“血缘关系”。@Ernesto,我需要不同的类组合来将它们传递给api参数。我有“祖父母”和“父母”,现在我只需要父类属性,我不想创建另一个父类,也不想复制子类中的所有属性。在我的项目中,控制器中的动作太多,每个动作都需要一组不同的参数。我试图通过使用继承实现参数的可重用性来解决这个问题。在WebAPI中,当我们传递一个类的对象时,我们公开了所有的属性(实际上)。如果我想传递'child'对象,我不想暴露祖父母的属性。expose:使用swagger获取控制器api的所有细节。我对WebAPI不熟悉,但是当你传递一个对象时,你也暴露了它的私有属性?如果您将Parent属性设置为private,并且仅操作IPerson,则它不会执行此操作?我只是使用上一条注释的应用程序编辑了我的答案。如果Person是private,则不能执行--'var Parent=new Person{Parent=grandParent};'是的,您可以,但您需要添加一个带有可选IPerson参数的构造函数,该参数将填充父属性。我会用它编辑我的答案!您关于接口的概念很好,但在这里不可用。实现接口时,需要实现所有属性。所以,如果我需要在类中再次实现所有属性,那么为什么我需要接口?使用接口,您可以将属性分成几个小组(每个接口2-3个专业人员),然后将它们添加到类中,即使没有很多父类。所有这些都取决于现有类(变量或方法)中的属性类型。