鉴于下面的代码,我得到以下错误,父母和孩子不会实现IParent / IChild。我明显误解了一些事情。实现这个的正确方法是什么,或者我最好使用抽象类?
要添加更多细节,这些类在EF中使用,因此我需要实现而不是具有抽象类型。 "该属性必须是有效的实体类型,并且该属性应具有非抽象的getter和setter。"
public interface IParent
{
int ParentId { get; set; }
IChild Child { get; set; }
}
public interface IChild
{
int ChildId { get; set; }
IParent Parent { get; set; }
}
public class Parent : IParent
{
public int ParentId { get; set; }
public Child Child { get; set; }
}
public class Child : IChild
{
public int ChildId { get; set; }
public Parent Parent { get; set; }
}
答案 0 :(得分:1)
您是否尝试过明确实现该界面?
public class Parent : IParent
{
public int ParentId { get; set; }
public Child Child { get; set; }
public int IParent.ParentId { get { return ParentId; } set { ParentId = value; } }
public IChild IParent.Child { get { return Child; } set { Child = value; } }
}
public class Child : IChild
{
public int ChildId { get; set; }
public Parent Parent { get; set; }
public int IChild.ChildId { get { return ChildId; } set { ChildId = value } } }
public IParent IChild.Parent { get { return Parent; } set { Parent = value } } }
}
注意:我实际上并没有尝试编译它,在显式实现的getter和setter中可能存在一些歧义,因此您可能必须获取并设置支持字段而不是属性。
答案 1 :(得分:0)
您的IParent和IChild将属性定义为IChild和IParent,而不是Child和Parent,即使您可以将这些属性分配给属性。因此,原始代码:
public class Parent : IParent
{
public int ParentId { get; set; }
public Child Child { get; set; }
}
public class Child : IChild
{
public int ChildId { get; set; }
public Parent Parent { get; set; }
}
应该成为:
public class Parent : IParent
{
public int ParentId { get; set; }
public IChild Child { get; set; }
}
public class Child : IChild
{
public int ChildId { get; set; }
public IParent Parent { get; set; }
}
答案 2 :(得分:0)
由于错误说你的类需要实现接口,所以你需要定义类如下:
public class Parent : IParent
{
public int ParentId { get; set; }
public IChild Child { get; set; }
}
public class Child : IChild
{
public int ChildId { get; set; }
public IParent Parent { get; set; }
}
答案 3 :(得分:0)
你无法改变界面的签名,你可以做这样的事情
public class Parent : IParent
{
private Child _child;
public int ParentId { get; set; }
public IChild Child
{
get { return _child; }
set { _child = (Child)value; } //dangerous zone
}
}
public class Child : IChild
{
private Parent _parent;
public int ChildId { get; set; }
public IParent Parent
{
get { return _parent; }
set { _parent = (Parent)value; } //dangerous zone
}
}