c# - 在c#中将基类动态转换为子类
问题描述
我有一个基类和两个子类,其中一个类具有附加字段。该函数将基类作为参数并在运行时将其转换为子类,但将基类转换为 B 类会出错
public class Base {
int x
}
public class A :Base {
A() { x= 5;}
}
public class B :Base {
int y ;
B() { x=5
y=5;
}
}
在运行时将基类转换为子类时,会引发无效的转换操作错误
public int getValue(Base base) {
A a = base as A //works fine
B b = base as B // throws invalid cast opertions
return (a.x + b.x + b.y)
}
它应该可以工作,因为这两个类都从基类继承,但无法弄清楚为什么它在 B 类上失败。
这是为什么?
解决方案
这是非常合乎逻辑的,只有当 base 的实例是 B 类时,才能进行强制转换。我做了一个小例子来更好地解释这一点:
public class BaseClass
{
public int x { get; set; }
}
public class A : BaseClass
{
public A() { x = 5; }
}
public class B : BaseClass {
public int y { get; set; }
public B()
{
x = 5; y = 5;
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bClase = new BaseClass();
A a = bClase as A; //a = null
B b = bClase as B; // c = null
BaseClass bClase2 = new A();
A a2 = bClase2 as A; //works fine
B b2 = bClase2 as B; // b2 = null
BaseClass bClase3 = new B();
A a3 = bClase3 as A; // b2 = null
B b3 = bClase3 as B; //works fine
//Cast down = ok
BaseClass bb = bClase3 as BaseClass;
}
}
PS:为了将来使用stackoverflow,请提供工作代码。让您的助手生活更轻松。
推荐阅读
- c# - 来自 WaterfallStep Dialog MS Bot 框架 v4 的自适应卡片响应
- react-native - react-native,react-native webview font-family, webview font-family
- java - 将一组添加到列表(java)
- java - Sonarqube 误报“使用 try-with-resources 或在“finally”子句中关闭此“ResultSet”
- python - python中用带空格和不带空格的引号`'`分隔的列表和分词句子
- wordpress - woocommerce存档过滤,组合属性(颜色)
- javascript - 工具提示未显示条形图 D3.js
- c# - 如何随时间动态延迟可观察的
- arrays - Excel重复最大函数
- javascript - jQuery 中的 MSAjax pageLoad