JUST DO IT ~

          我只想當個程序員

          方法 new override virtual

          摘 :  http://hacker.cnblogs.com/archive/2004/08/10/31774.aspx

          對virtual的說明是對的:(它一般用在基類中,子類中用override)
          1.無virtual時,編譯期就確定方法的類型了。也即:無法實現多態了。
          2.有vitual時,方法在運行時確定類型。可以實現多態,只要子類override基類的vitual方法。(也就是樓主的第2點)。

          實現java  動態調用 

           
          另外取個方法 與原來無關.


          對于new沒有說清楚:
          new與virtual并沒有必然的聯系。從字面上看,new聲明的方法是一個“新”方法,與基類完全沒有關系(雖然不幸與基類的某個方法同名同參)。也即:通過向上轉型(如:基類 引用名=new 子類())得到的引用將無法看到子類中new出來的方法。所以會出現樓主第3點中的結果。

           

           







          using System; 

          public class ClassFather 



          public string s1; 

          // virtual public void VirFun() 

          public void VirFun() 

          { Console.WriteLine( 
          "base  classfather virFun:"+ s1 );} 




          public class ClassBoy : ClassFather 



          public new void VirFun() 

          base.VirFun();} 




          public class ClassGirl : ClassFather 



          public new void VirFun() 



          base.VirFun(); 

          Console.WriteLine( s1 ); 






          public class Test 



          public static void Main() 



          ClassFather a 
          = new ClassFather(); 

          a.s1 
          = "father"

          a.VirFun(); 


          ClassFather b 
          = new ClassBoy(); 

          b.s1 
          = "boy"

          b.VirFun(); 


          ClassFather c 
          = new ClassGirl(); 

          c.s1 
          = "girl"

          c.VirFun(); 








          using System; 


          public class ClassFather 



          public string s1; 

          virtual public void VirFun() 

          { Console.WriteLine( "ClassFather  virfun()(: "+ s1 );} 

          }
           


          public class ClassBoy : ClassFather 



          public override void VirFun() 

          {
          Console.WriteLine( 
          "ClassBoy  virfun() : "+ s1 );   // base.VirFun();} 

          }
           


          public class ClassGirl : ClassFather 



          public new void VirFun() 



          //base.VirFun(); 

          //Console.WriteLine( s1 ); 

           Console.WriteLine( 
          "ClassGirl new  virfun() : "+ s1 );

          }
           

          }
           


          public class Test 



          public static void Main() 



          ClassFather a 
          = new ClassFather(); 

          a.s1 
          = "father"

          a.VirFun(); 


          ClassFather b 
          = new ClassBoy(); 

          b.s1 
          = "boy"

          b.VirFun(); 


          ClassFather c 
          = new ClassGirl(); 

          c.s1 
          = "girl"

          c.VirFun(); 

          }
           

          }



          posted on 2008-08-29 08:26 小高 閱讀(236) 評論(0)  編輯  收藏 所屬分類: DotNet

          導航

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙海市| 武城县| 济阳县| 任丘市| 平谷区| 康马县| 上蔡县| 丰原市| 临西县| 崇明县| 兴宁市| 陆良县| 蒙自县| 射洪县| 抚宁县| 桐乡市| 建阳市| 柏乡县| 格尔木市| 平乡县| 濉溪县| 岳普湖县| 云阳县| 绩溪县| 隆德县| 光山县| 抚宁县| 长寿区| 高邑县| 肇庆市| 和顺县| 高州市| 丰原市| 开化县| 宜都市| 年辖:市辖区| 千阳县| 玛多县| 左权县| 海门市| 新建县|