gpt4 book ai didi

c# - 在没有数据重复的情况下转换/实例化/转换为子类/父类(super class)

转载 作者:行者123 更新时间:2023-11-30 02:06:15 27 4
gpt4 key购买 nike

这是一种面向对象的问题,欢迎回答 C++、C#、ObjC 中的任何一个。在一个应用程序中,我有以下类结构。

class ToSend {
public int id;
public int prop1;
}

class Received : ToSend {
public int prop2;
public int prop3;
}

class Viewer : Received {
public static int viewerProp;
public String viewerMethod() {... Using viewerProp...}
}

Received 类的集合是从服务接收的。 viewerMethod (Viewer) 应用于在列表中显示集合中的每个项目。在多选和 prop1 更改后,应发送回修改集合 (ToSend)。

问题 1:如何将 Received 的所有实例转换或转换为 Viewer 以使用它们的 viewerMethod?我应该使用门面模式吗?我不想复制数据,因为它会占用太多空间。

问题 2:我应该如何将 Received 的选定实例转换或转换为 ToSend 以限制可访问的属性?(在显式转换 JSon 编码器后,将在传出消息中包含 Received 的所有属性)

最佳答案

首先问问自己继承是否是这里的正确解决方案。一般的经验法则是用文字来表达两个类之间的关系。

如果你说ClassA IS a ClassB,那么在大多数情况下你应该使用继承。例如,Tiger IS a Mammal which IS an Animal。老虎继承了所有动物共有的所有特性,加上所有哺乳动物共有的特性,再加上一些它自己物种独有的特性。

如果您说 ClassA 有一个 ClassB,那么在大多数情况下您应该使用组合。例如,老虎有 dentry 和爪子。但是永远不会说 Tooth IS a tiger,所以 Tooth 类永远不应该继承自 Tiger 类。相反,它应该是 Tiger 类的成员变量。

如果 Viewer 不是 Received 的特例,则它不应继承自 Received。

关于c# - 在没有数据重复的情况下转换/实例化/转换为子类/父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8946025/

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