子类与父类对象之间有区别吗?

时间:2018-07-09 07:01:20

标签: c# .net inheritance

我正在研究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.

我可以通过将各个属性保留在各个子类中来实现第二种行为,但这会与我的第一种行为相矛盾。另外,我不想通过创建两个单独的对象来保留冗余数据。我可以使用签入属性设置器或使用设置器方法来实现类似的目的,但这并不是确切的行为。

有人可以建议我如何实现上述行为吗?

对于标题引起误解的标题,我们深表歉意。

1 个答案:

答案 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>
{
}

我编辑答案-您不必在子类中再次定义属性。...

子类中的属性“属性”将为TextPropertiesImageProperties类型。

感谢您的评论