我正在使用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#中缺少多重继承。
答案 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举了一个例子。
如果你想要更好的例子,你应该制作一些有关数据的数据图表。