c# - 显式转换的问题

标签 c# inheritance casting

我在 C# 中有一个继承自另一个产品类的产品类

using ExternalAssemb.ProductA;

public class MyProduct : ProductA
{
    //....
}

我正在尝试从我引用的 DLL 中的 ProductA 进行显式转换,但它告诉我它无法转换

MyProduct myProduct = (MyProduct)productAobject;

结果::System.InvalidCastException:无法将“ExternalAssemb.ProductA”类型的对象转换为类型“MyAssembly.MyProduct”。

我做错了什么?

最佳答案

可以ProductA 引用转换为 MyProduct 引用,但只有它实际指向 MyProductA 或其子项。

您正在做的是试图像对待 child 一样对待 parent ,这是行不通的。相反,您可以像对待 parent 一样对待 child ,因为它就像 parent 一样。

考虑一个通用示例,其中基类称为 Shape 并具有子类,例如 SquareCircle。给定一个 Shape 引用,您可以将任何 child 分配给它。但是,如果引用引用的是 Circle,则不能将其转换为 Square。这是有道理的,因为所有圆都是形状,但没有圆是正方形。

希望示例有所帮助。

关于c# - 显式转换的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489657/

相关文章:

c# - 用抽象类型实现抽象类

python - 在实例方法中从父级访问类属性

c++ - 是否将指向第一个成员的指针解释为类本身定义良好?

java - 如何使用 Java 泛型避免不安全的强制转换警告

c++ - 这个c++继承结构可能吗?

mysql - mysql中::numeric和::text是什么意思

c# - 检查 C# 中两个 ArrayList 之间的差异

c# - 想要替代 Response.End()

c# - 将类的属性作为参数传递?

c# - 在调试器可视化器中获取变量名