gpt4 book ai didi

c# - 区分子类和父类对象?

转载 作者:太空狗 更新时间:2023-10-30 01:13:11 24 4
gpt4 key购买 nike

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

现在我想实现两种行为:

首先,我想要 Content 中的 ContentProperties 属性,以便我可以将其概括为 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.

我可以通过在各个子类中保留各个属性来实现第二种行为,但这会与我的第一种行为相矛盾。另外,我不想通过创建两个单独的对象来保留冗余数据。我可以使用 checkin 属性 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 类型。

感谢您的意见

关于c# - 区分子类和父类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51239761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com