写了两个类
public class BaseA
{
....}
public class A:BaseA
{...}但当我写以下调用时却报错:如果想强制转换该处理是好?
BaseA baseA=某类.get();
A a=(A)baseA
转换时提示,不允许强制转换,这该如何是好?

解决方案 »

  1.   

    A a = baseA as A;
    if (a!=null)
    {
    }
      

  2.   

    父类的对象向子类转换是不可以
    父类对像在new出来的时候是父类对像
    只能是父类对像
      

  3.   

    你肯定是直接new的父类
    如果你是先new的一个子类,然后用一个父类型变量引用了它,然后再用另一个同样的子类变量引用父类型变量的强制转换是可以的.
    即:
    A a = new A();
    BaseA ba = a;
    A b = (A)ba;
    是可以的
      

  4.   

    谢谢各位的回答,转换是做不了,但自已写了一个公共方法:如下:
    可以自由转换两个实体对象:以供参考public static void AsObject(object fromObj, object toObj)
            {
                string name = "";
                object attValue=null;
                Type fromType=fromObj.GetType();
                Type toType=toObj.GetType();
                PropertyInfo[] attributes = fromType.GetProperties();
                PropertyInfo[] toAttributes=toType.GetProperties();
                for (int i = 0; i < attributes.Length; i++)
                {
                    name = attributes[i].Name;
                    if (attributes[i].CanRead)
                    {
                        attValue = attributes[i].GetValue(fromObj, BindingFlags.GetProperty, null, null, null);
                        for(int j=0;j<toAttributes.Length;j++)
                        {
                            if(name!=toAttributes[j].Name)continue;
                            if (toAttributes[j].CanWrite) toAttributes[j].SetValue(toObj, attValue, BindingFlags.SetProperty, null, null, null);
                            break;
                        }
                    }
                }
            }
      

  5.   

    你把fromObj的值复制到toObj,跟问题中所说的“转换”完全是两回事。所谓 A a=(A)baseA;的写法,编译器也无法判断是否有错,因为这完全可能的。这是面向对象设计最基本知识,baseA虽然声明为BaseA类型,但是它完全可以在实例化是子类型的,就好象“公孙龙的白马”不因为你说它是“马”于是变成另外一种东西了。如果你将baseA实例化为A或者A的子类,那么就可以使用a变量来引用它,没有任何问题。编译器不知道此时是否正确,只有运行时根据你为baseA变量传来的实际对象才能知道它是否本来就是A类型的。