[英]Dynamic casting of base class to child in 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,请提供工作代码。 使您的助手生活更加轻松。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.