你意思是基类  a=new 子类();这时候是可以把a直接转换成子类类型的。。有2种办法,1是直接强制转换。2是使用as但是。。如果你  基类 a=new 基类()。。这时候你是无法把a转换为继承自它的类型的。。除非用反射,动态的创建一个子类,把父类的东西赋予它

解决方案 »

  1.   

    是这样, 基类 a = new 子类(); 
    我希望可以在不知道子类类型的前提下直接转成子类声明, 类似功能 var b = ( a.GetType() )a;  当然这个写法是错误的,所以想知道有什么办法可以达到这样的效果。
      

  2.   

    是这样, 基类 a = new 子类(); 
    我希望可以在不知道子类类型的前提下直接转成子类声明, 类似功能 var b = ( a.GetType() )a;  当然这个写法是错误的,所以想知道有什么办法可以达到这样的效果。我明白你的意思。。这要使用到泛型。。比如GetObj<T>() where T:基本类类型, new(){}
      

  3.   

    问题是这样,  现在获取到一个对象,只知道其基类声明,不确定子类型到底是什么, 我需要把它转换成子类的声明,以便于获取子类中的独有数据。            class a : base  ;    class b : base ;     现在有声明为base的某个其子类对象, 如果是a类,我需要得到a temp = (a)base;   b类需要得到 b temp = (b)base;    当然,我可以通过直接判断其对象类型来显式的做转换。   
         我想了解的是在不显式的指定其子类型做转换的前提下, 有没有什么办法。 Type类能不能帮上忙 ?
      

  4.   

    既然不知道子类的类型,怎么声明变量类型呢?你不可能穷尽所有子类的类型吧。实在不明白楼主你想要干什么,如果是要子类实现某个功能,可以在base里定义一个虚方法,然后在a和b里实现,这样只要从base里调用这个方法就可以了,管他是a还是b呢。
      

  5.   

    就算你知道它的类型并转换成功了,你打算怎么做呢?
     if( t is A)
      t.aa="XX";
    else if(t  is B)
      t.bb="XXX";
    ........还是用泛型吧骚年
      

  6.   

    我需要得到a temp = (a)base;   b类需要得到 b temp = (b)base;   结合你上面所叙述的内容。。你想要的是var temp = 方法 base base如果是a类型,var temp 就是 a类型。。你这样的思路是错的,哪怕用反射,它出来的也是个object类型。。你也要强制转换成base或a,b类型。。你需要的是泛型你好好去理解下吧。。不然你可以把设计和思路都放上来,让大家看看。。我可以很肯定的是你的思路是绝对错误的
      

  7.   

    又仔细看了一遍楼主的提问,发现“独有”这个词,我想是不是这个意思。
    class Base
    {
    }
    class A : Base
    {
      public int P1 { get; set; }
    }class B: Base
    {
      public int P2 { get; set; }
    }class Program
    {
      public int SomeMethod(Base obj)
      {
        if (obj is A) return ((A)obj).P1;
        else if (obj is B) return ((B)obj).P2;
        else
           throw new NotImplementedException("你很蛋疼");
      }
    }
    楼主你确定这是你想要的吗?
      

  8.   


    不是的    是我前面没描述清楚, 我想要的是, 我当前只有一个object, 不知道其基类,也不知道子类。    可否通过Type类转换为子类结果 var res = (obj.GetType())object;      此语句仅描述意思   
      

  9.   

    所谓反射,是通过对象名称来找对象,首先你就要知道对象名称
    比如你有a和b
    现在传入一个字符串"a",通过这个字符串去找到a,并调用如果连这个都不知道,那就根本和反射不沾边.你现在是有个object类型的变量,但是不知道类型,你想先匹配出类型,再实例化?
      

  10.   


    对,我想在仅仅只有一个object对象没有任何其他信息的情况下匹配出类型, 有没有可能 ?
      

  11.   

    var res = (obj.GetType())object??????这显然不符合语法要求,根本不能编译,即使是理解也是不对的。
    显式的类型转换是在编译时处理的,在编译时可能根本不知道某个变量真正的类型是什么,具体的类型只有在运行的时候,通过语句一条一条执行才能知道变量的实际类型,GetType()或反射就是在运行时处理的,试想一下这样两种方式怎么硬把它们合到一起去呢?
    有几种办法来解决这个问题:
    1、有共同基类,可通过基类的虚方法(属性)来访问子类的成员,接口也可以。
    2、如果没有共同基类,但在写代码的时候知道某个方法或属性的名称,并且你用的是.net 4.0或更高版本,可以用dynamic关键字。
    3、如果只是想调用一个方法,并且这个方法在所有类型里的声明都一样,可以用委托。
    4、如果没有任何共同点,可以用一个配置文件来说明哪个类型调用哪个方法,然后用反射来调用。
    如果以上情况都不满足你的要求,要么改动原来的程序来满足,要么你就改行吧。
      

  12.   

    显式的类型转换是在编译时处理的,在编译时可能根本不知道某个变量真正的类型是什么,具体的类型只有在运行的时候,通过语句一条一条执行才能知道变量的实际类型,GetType()或反射就是在运行时处理的,试想一下这样两种方式怎么硬把它们合到一起去呢
    了解了, 多谢