gpt4 book ai didi

oop - 自动将对象扩展到某个继承类

转载 作者:行者123 更新时间:2023-12-04 23:26:29 25 4
gpt4 key购买 nike

假设我有以下声明:

public class ClassA
{
public string FieldA = "Something first";
}

public class ClassB : ClassA
{
public string FieldB = "Something second";
}

众所周知 ClassB的对象可以在任何地方使用 ClassA是必须的。例如一个方法
public void DoSthWithObject(ClassA a);

可以这样调用:
ClassB b = new ClassB();
DoSthWithObject(b);

也可以将继承的类型转换为父类型:
ClassA a = (b as ClassA);

所以编译器/框架知道如何“使用” ClassB 的数据哪里 ClassA是必须的。

现在的问题是: 有可能以某种方式反过来吗? 假设我有一个 ClassA 类型的变量我想开始使用它作为 ClassB但同时保留所有字段 ClassB继承自 ClassA并且不实例化一个新对象?我知道这需要扩展为 ClassA 的对象分配的内存容纳 ClassB 的字段.

简单地说,我想做这样的事情:
ClassA a = new ClassA();
ClassB b = (a as ClassB); // some magic happens here

(我知道我可以实现 IConvertible 并使用 Convert 或提供一些克隆机制,但我想避免这种解决方案。)

编辑

由于答案似乎集中在提出替代解决方案或警告我什至想按照自己的意愿行事,我决定稍微改变我的问题并提出悬赏,这样也许我可以获得更好的答案。

首先,我希望这是语言不可知的。

第二:我真的 明白,不是每个工具都是锤子,我可以(我希望)区分 Jack 和 Jane。我也不需要关于基本 OOP 的类(class)(除非有人实际上可以证明我犯了一个我目前显然没有意识到的基本概念错误)。我想知道的是 如果以及为什么自动父类到子类的转换在逻辑上是不可能的 如果可能的话(从评论中可以看出,有些语言是可能的)然后 为什么它很危险/充满缺陷 .同样非常有趣的是,这些语言实际上是如何在技术上完成的,“支持”它(或至少不禁止它)。

但我确实期待真正的编程示例,而不仅仅是隐喻。

明确地说:我不是在寻找有关向下转换以前向上转换的对象的信息。这不是这里的情况。

如果我是一个希望在同一个表列上同时聚合和分组的人 - 请告诉我这个。我知道我很聪明,可以理解。 :-) 我只是不想留下这个问题,感觉有一些关于 OOP 的基本知识我没有理解。

公告

在大卫回答下的评论中,我提到了浮点数,但实际上指的是实数(数学术语)。这是由于我相当不完美的英语。请停止挑剔它。 :]

谢谢

我要感谢大家的回答。我决定悬赏史蒂夫,但这并不意味着我认为这个问题已经结束。我仍在寻找反对自动对象转换的论据。我必须管理,我感到有点失望,因为那些最警告我的人无法提供与转换相关的清晰示例(而不是与转换相关)。

根据我自己的研究,我决定在一个单独的答案中记录一些事情(以防有人发现它们有用)。请随时编辑和扩展列表。

最佳答案

不!从类的基本描述来看,ClassA 是 不是 一个 B 类。您描述的关系不是对称/自反的。可以这样想:每个锤子都是工具,但并非每个工具都是锤子。如果您需要转动螺丝,则需要工具,但锤子无法完成这项工作。用这个类比替换上面的类定义,我认为从表面上看,为什么这种关系不起作用就很清楚了。

关于oop - 自动将对象扩展到某个继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12231771/

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