c# - 无法从 BaseClass<int> 隐式转换为 DerivedClass

标签 c#

我无法从 BaseClass<int> 隐式转换到它的DerivedClass .我有以下代码:

class BaseClass<T>
{
}

class DerivedClass : BaseClass<int>
{
    int blah;
}

然而一个方法foo()返回 BaseClass<int>对象不能进行以下工作:

DerivedClass tmp = foo();

更新: Actor DerivedClass tmp = (DerivedClass)foo();也没有用。

最佳答案

这是由于继承和向上转型的规则。

假设我们有类 A 和派生自它的 B:

Class A{
}

Class B : A{
}

因为 B 是一个 A,那么你可以这样做 A = new B();

没错,您只需通过“A 的眼睛”看 B。这称为向上转换。

但是,A 不是 B,所以这样做 B b = new A()

不正确,b 不能实例化,因为它是父类。

这样做的方式是这样的

B b = (B)a;

这称为 RTTI 或 Downcasting 。这在 OOP 中通常不被推荐。

希望对您有所帮助。

编辑:

我给出的向下转换示例抛出了一个错误,因为“a”变量实际上是一个 A。

安全的向下转型是这样的:

A a = new B(); \\a is a B looking through A, upcasting.
B b = (B)a; \\ this is downcasting, since now I want to use a with his B identity

关于c# - 无法从 BaseClass<int> 隐式转换为 DerivedClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977701/

相关文章:

c# - 当我将数据发布到 WCF 服务时,我的 Java 代码总是返回 Bad Request 400

c# - 使只读属性可设置

c# - 从 chrome 扩展到用 C# 编写的 native 主机的 native 消息传递

c# - 如何在同一中继器中的另一个 <td> 中的中继器中访问 <td> 内的标签

c# - 如何从 RichTextBox 控件的撤消堆栈中删除操作?

c# - 当我给 MyObject obj = new MyObject() 时发生了什么

c# - 如何在DNN自定义模块开发包中添加数据库脚本?

c# - 从 WCF 服务返回 List<T> 作为 XML 响应?

c# - 从基于索引的正则表达式中获取反向引用基于名称的正则表达式

c# - 获取正确的VS2017实例用于自开发扩展