类型转换的疑问 as 和 () 的转换方式:
(toBuildEntity as ICustomInitialization).do  --> . 之后有 do这个方法   (方法1)
(ICustomInitialization)toBuildEntity.do   --> . 之后 没有 do 这个方法   (方法2)我一般情况下 都使用 (方法2),但有时 这个方法 就是没有出来,我 就没办法了,因为 以前学c,c++ 时,老师教的 都是用这种方法。
后来灵机一动:
((ICustomInitialization)toBuildEntity).do  ---> 这样也有do 这个方法   (方法3)这三种发法 有什么不同?

解决方案 »

  1.   

    方法二是错误的等把toBuildEntity.do 返回的对象转换成ICustomInitialization了
      

  2.   

    关于as 操作符可以参考MSDN
    http://msdn.microsoft.com/en-us/library/cscsdfbt(VS.71).aspx
    as操作符和强制转换的关系参见
    http://hi.baidu.com/silyt/blog/item/5e613a8bee21f417c8fc7ac3.html
      

  3.   

    ((ICustomInitialization)toBuildEntity).do
    我都是这么写的
      

  4.   

    你看下这个文章,里面说的很详细
    http://blog.sina.com.cn/s/blog_3eddeef8010008lt.html
      

  5.   

    形式上地区别,没有实质的区别有些场合用()写的代码会比较美观一些,例如string myString = ((IInterface)myObject).MyMethed();但有些场合用 as 又会比较美观一些,例如string myString = objectStrng as string;仅此而已。
      

  6.   

    还有一个就是代码会简化一点,比如if( myString.GetType().Name.Equals("string") ) {
      ....
    }可以改为if( myString as string ) {
      ....
    }
      

  7.   

    ((ICustomInitialization)toBuildEntity).do  
    应该这样的
      

  8.   

    第2和第3,运算优先级不一样as和is都只能对引用对象使用()可以对值对象