gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:51:15 26 4
gpt4 key购买 nike

我无法从 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/

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