我正在研究2个与下面相似的层次-
层次结构1:
public class Content
{
}
public class Text : Content
{
}
public class Image : Content
{
}
等级2:
public class ContentProperties
{
}
public class TextProperties : ContentProperties
{
}
public class ImageProperties : ContentProperties
{
}
现在我要实现2种行为:
首先,我想要Content中的ContentProperties属性,以便可以对Content的所有Child类进行归纳。然后,我可以根据所需的子类型在子类中单独分配它们。
这样的事情。
public class Content
{
public ContentProperties Properties {get;set;}
}
public class Text : Content
{
public Text()
{
this.Properties = new TextProperties();
}
}
...对于其他子类,依此类推。
第二,我想限制一种类型的子类,使其仅具有其对应类型的属性。
例如
Text text = new Text();
text.Properties = new ImageProperties(); //This should give an error - should not be possible.
我可以通过将各个属性保留在各个子类中来实现第二种行为,但这会与我的第一种行为相矛盾。另外,我不想通过创建两个单独的对象来保留冗余数据。我可以使用签入属性设置器或使用设置器方法来实现类似的目的,但这并不是确切的行为。
有人可以建议我如何实现上述行为吗?
对于标题引起误解的标题,我们深表歉意。
答案 0 :(得分:4)
您可以对constraints使用泛型:
public class Content<T> where T : ContentProperties
{
public T Properties {get;set;}
}
public class Text : Content<TextProperties>
{
}
public class Image : Content<ImageProperties>
{
}
我编辑答案-您不必在子类中再次定义属性。...
子类中的属性“属性”将为TextProperties
和ImageProperties
类型。
感谢您的评论