//父类
public class a
{   public a()
    {
}
}
//子类
pulbic class b:a
{
    public b():base()
   {
   }
   public void f()
   {   }
}
//主函数
public static void Main()
{
    a a1 = new a();
    b b1;
    //怎样进行  a1 -> b1的转换    //请帮帮菜鸟,急急....
    b.f();

解决方案 »

  1.   

    b1 = (b)a1   是不行的!
      

  2.   

    a a1 = new a();
        b b1;
        //怎样进行  a1 -> b1的转换    //请帮帮菜鸟,急急....
        b.f();没必要这么做。
    直接a.f();因为就算你可以做转换,还是调用a.f();想实例化一个父类。而去调用子类的方法,这是不可以的。只能实例化一个子类,可以调用自己或者父类的方法。
      

  3.   

    //不好意思,我做一下修改  就有意义了
    public class ClassA
    {
      protected string _s;
      public ClassA(string s)
      {
          _s = s;
      }
    }public class ClassB : ClassA
    {
     
      public ClassB( ) : base()
      {
       
      }  public string GetString()
      {
        return _s;
      }
    }我按照你的写://这回程序就好意义了
    ClassA a = new ClassA();
    ClassB b = (ClassB) a;
      

  4.   

    这么做的目地就是想取 ClassA 类中 _s的值
      

  5.   

    那和直接在ClassA或ClassB写个方法就可以了,不需要转换类。
      

  6.   

    一般情况下,子类是对父类的扩展,所以子类实例存储空间一般都会超过父类实例的存储空间,要是将一个父类实例强制转换为一个子类实例,OH MY GOD!就有可能会使用到未定义的空间,当你使用到子类扩展成员的时候就有可能会报错.SO,一般情况下是不允许转换的.虽然说这个父类实例可能本来就是通过子类实例转换过来的,现在想转换回去,这种情况不会报错.但是为了保证不出现上面所说的一般情况,只好一刀砍掉了.你需要理清一下自己的思路,你为什么要将父类转化成子类,有没有别的方式实现你的设计
      

  7.   

    应该是这样的:
    ClassA a=new ClassB();
    // 转换
    ClassB b = (ClassB)a;
    s = b.GetString();