举个例子说明一下吧.
System.IO.FileInfo fi = new System.IO.FileInfo(path);
System.IO.FileSystemInfo fsi = (FileSystemInfo)fi;这种类的转换是仅限于派生类转换成父类.还是达成某一条件就可以转换,这种转换可逆吗?即父类转成派生类.这种转换内部是怎么进行的??

解决方案 »

  1.   

    首先...你这叫强制转换...不是隐式转换...System.IO.FileSystemInfo fsi=fi;//这才是隐式转换一般说来...派生类都可以隐式转换为父类...而父类转换为派生类都需要强制转换...
      

  2.   


    在系统内部,对象通过引用来使用,比如在你的代码中 System.IO.FileInfo   fi   =   new   System.IO.FileInfo(path);  fi 即一个指向对象的引用。同样在 System.IO.FileSystemInfo   fsi   =   (FileSystemInfo)fi; 中,fsi 也是一个指向对象的引用。指向子类对象的引用通过强制转换,可以做为父类对象的引用来使用。举例来说,狗是父类,黑狗是子类,我们可以把黑狗叫作狗。
    但是指向父类对象的引用不可以转换为指向子类的引用。比如说,你不能将狗叫作黑狗,因为不是所有的狗都是黑狗。类型的转换主要有两种方式:一种通过在引用前面加 ( 类型 ) 来进行强制转换,如:
    System.IO.FileSystemInfo   fsi   =   (FileSystemInfo)fi;
    如果 fi 不可以转换为 FileSystemInfo,系统会抛出异常。第二种通过 as 进行转换
    System.IO.FileSystemInfo   fsi   =   fi as FileSystemInfo;
    如果 fi 不可以转换为 FileSystemInfo, fsi 为 null, 系统不会抛出异常。