我正在研究两个类似于下面的层次结构-
层次结构1:

public class Content
{
}

public class Text : Content
{
}

public class Image : Content
{
}

层次结构2:
public class ContentProperties
{
}

public class TextProperties : ContentProperties
{
}

public class ImageProperties : ContentProperties
{
}

现在我想实现两个行为:
首先,我想要contentproperties在content中的一个属性,这样我就可以将它泛化为content的所有子类。然后我可以根据需要的子类型在子类中独立地分配它们。
像这样的东西。
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.

我可以通过在单独的子类中保留个人属性来实现第二个行为,但这与我的第一个行为相矛盾。另外,我不想通过创建两个独立的对象来保留冗余数据。我可以使用签入属性setter或使用setter方法来实现类似的功能,但是,这并不是确切的行为。
有人能建议我怎样才能达到上述行为吗?
如果标题措辞不正确,引起误会,敬请原谅。

最佳答案

您可以将泛型与constraints一起使用:

public class Content<T> where T : ContentProperties
{
    public T Properties {get;set;}
}

public class Text : Content<TextProperties>
{
}

public class Image : Content<ImageProperties>
{
}

我编辑了答案-您不必在子类中再次定义属性…
子类中的属性“properties”将是TextPropertiesImageProperties类型。
谢谢你的评论

08-06 01:06
查看更多