<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 11, comments - 29, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    C#與Java(一)

    Posted on 2005-11-11 10:27 -=Kinohl=- 閱讀(1486) 評論(2)  編輯  收藏 所屬分類: 編程語言

    C#與Java(一)


    ************************************************
    關(guān)鍵字:繼承
    難易度:易
    ************************************************


    最近因?yàn)楣ぷ餍枰_展基于C#的研發(fā)。我在這里也就寫一點(diǎn)作為Java程序員對于C#的部分感想吧。畢竟能力有限,請各位高手多多點(diǎn)撥。

    1.1實(shí)現(xiàn)的繼承

    C#和Java一樣不能繼承private。但是C++可以在繼承中明確指出要繼承共有的還是私有的。如下:

    這個是C#的繼承書寫方法,作為基類的CSharpBaseClass并沒有限定符。

    1class CSharpClass :CSharpBaseClass
    2{
    3   //成員
    4}

    這個是Java了,熟悉吧。

    public Class JavaClass extends JavaBaseClass
    {
      
    //成員
    }

    C++的定義如下:

    class CPlusPlusClass: public CPlusPlusBaseClass
    {
       
    //成員
    }

    1.2虛函數(shù)

    把一個基類函數(shù)聲明為virtual,該函數(shù)就可以在任何派生類中重寫了。
    Java的語法中沒有virtual這個詞,但是Java卻徹徹底底的貫徹著這個概念,Java的所有函數(shù)都是虛擬的。
    C++的朋友可能比較熟悉這個詞吧。對于這一點(diǎn)C#和C++是相同的。但是語法稍微有點(diǎn)不同,C#需要使用override類顯示聲明重寫函數(shù)。如下例

    class BaseClass
    {
             
    public virtual string VirtualMethod()
            
    {
                       
    return "The virtual method in defined in Base class";
            }

    }


    class ChildClass : BaseClass
    {
                
    public override string VirtualMethod()
            
    {
                       
    return "The override method in defined in child class";
            }

    }



    1.3隱藏方法
    相同簽名的方法在基類和子類都聲明了,但方法不是vitrual。那么實(shí)際中到底哪個方法被執(zhí)行,取決于引用實(shí)例的變量類型,而不是實(shí)力本身的類型。
    我們也不用太擔(dān)心這個問題,因?yàn)镃#會在編譯期給出警告。

    1.4調(diào)用積累函數(shù)的方法
    java中我們使用super,C#中使用base。

    1.5抽象類和抽象函數(shù)
    和java一樣使用abstract聲明。
    和C++相比,C++的抽象函數(shù)被聲明為純虛函數(shù)。

    1.6密封類和密封方法
    在Java中我們把它叫做final。也就是不能繼承的類或不能重載的方法。

    1.7構(gòu)造函數(shù)的調(diào)用層次
    和Java一樣,我就不多說了。這里強(qiáng)調(diào)一個特殊的語法格式:

    public class BaseClass
    {
      
    private temp = "Default Construct";

      
    public string _flag
      
    {
         
    getreturn temp;}
         
    set{ temp = value;}
      }



      
    //Constructor with one Parameter
      public BaseClass(string f)
      
    {
          flag 
    = f;
      }

    }


    public class ChildClass : BaseClass
    {
       
    public ChildClass():base("Customized Construct"){}

       
    public Second(string f):base("BPara:CPara = 1:1"){}

       
    public Second(string f,string g):base("BPara:CPara = 1:2"){}

       
    private static void showConstructFlag()
       
    {
          
    new Second();
          Console.WriteLine(
    "Show ConstructFlag:\n ChildClass():base(\"Customized Construct\")="+_Flag);

          
    new Second("test1");
          Console.WriteLine(
    "Show ConstructFlag:\n Second(string f,string g):base(\"BPara:CPara = 1:1\")="+_Flag);

          
    new Second("test2","no use");
          Console.WriteLine(
    "Show ConstructFlag:\n Second(string f,string g):base(\"BPara:CPara = 1:2\")="+_Flag);
        }

       
        
    public static void Main()
        
    {
            showConstructFlag();
        }

    }

    結(jié)果如預(yù)計(jì)那樣 :
    如果基類含有帶參數(shù)的構(gòu)造函數(shù),派生類不能調(diào)用默認(rèn)基類構(gòu)造函數(shù)。
    多參數(shù)派生類構(gòu)造函數(shù),可以調(diào)用參數(shù)數(shù)目不同的基類構(gòu)造函數(shù)。

    我們一起來看看為什么這2個結(jié)論可以成立:
    首先,對于帶參數(shù)的基類構(gòu)造函數(shù)在初始化的時候會試圖去調(diào)用基類默認(rèn)構(gòu)造函數(shù),但在上邊的基類程序里,因?yàn)橹宦暶髁藥б粋€參數(shù)的構(gòu)造函數(shù),所以public Second(string f):base()或者public Second(string f)就不會通過編譯,因?yàn)樗也坏交惖哪J(rèn)構(gòu)造函數(shù),只能追加public BaseClass()才會通過。這一點(diǎn)和JAVA是不同的,java的默認(rèn)構(gòu)造函數(shù)默認(rèn)是不出現(xiàn)在代碼里的。C#卻一定要寫出來。

    <<<== 有錯誤。C#的默認(rèn)構(gòu)造函數(shù)體制和Java是一樣的。具體如下:
    1。父類沒有自定義構(gòu)造函數(shù)的情況下,使用默認(rèn)構(gòu)造函數(shù)。用戶可以不寫出來。
    2。一旦父類有了自定義的構(gòu)造函數(shù),那么如果要使用無參的默認(rèn)構(gòu)造函數(shù)就必須要顯示定義。





    其次,下邊派生類1個參數(shù)、2個參數(shù)甚至多個參數(shù)的構(gòu)造函數(shù)為什么能訪問只有一個參數(shù)的基類構(gòu)造函數(shù)呢?原因是,關(guān)鍵字this,上邊的程序改寫如下我想大家就明白了。

    public Second(string f):base("BPara:CPara = 1:1"){}

    public Second(string f,string g):this(string f,"<None"){}

    2.1修飾符
    C#支持下邊的集中修飾符:
    public ,   protected , internal  ,private , protected internal
    同Java。internal和protected internal是.net framework新增的一個內(nèi)容。根據(jù)定義。
    internal在同一個程序集內(nèi)和public類似,不同的程序集間,public聲明的類或方法仍然可用,但是internal的方法或類則被隱藏。
    protected internal合并了protected 和internal,但這是一種or關(guān)系,而不是and關(guān)系。protected internal成員在同一個程序集的任何代碼都可見,在派生類可見。

    2.3接口
    接口公約:
    不能實(shí)例化接口。
    接口不能有構(gòu)造函數(shù)或字段。
    接口定義也不允許包含運(yùn)算符重載。
    接口定義中還不允許聲明成員上的修飾符。接口成員都是public的,不需要static也不需要virtual。

    同Java
    接口可以彼此繼承,其方式和類繼承相同。如下:

    namespace my.test
    {
      
    public interface IBase
      
    {
          
    void setName();
          
    bool isMe(string name);
          
    string name
          
    {
             
    get;
          }

       }

    }


    namespace my.test
    {
        
    public interface IChild:IBase
        
    {
           
    bool isOK();
        }

    }

    告一段落吧。                                 (つづく)
    請多提意見,如果有什么不清楚的地方也請你寫下來,一起調(diào)查咯。  


    評論

    # re: C#與Java(一)  回復(fù)  更多評論   

    2005-11-12 23:40 by 切爾斯基
    "這一點(diǎn)和JAVA是不同的,java的默認(rèn)構(gòu)造函數(shù)默認(rèn)是不出現(xiàn)在代碼里的。C#卻一定要寫出來。"

    這是真的嗎?

    # re: C#與Java(一)  回復(fù)  更多評論   

    2005-11-14 11:02 by -=Kino=-
    切爾斯基
    謝謝提示,已經(jīng)修正。

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲va在线va天堂va888www| 最新精品亚洲成a人在线观看| 国产片免费在线观看| 亚洲欧洲日本在线| 亚洲AV午夜福利精品一区二区| 亚洲图片校园春色| 亚洲男同gay片| 美女巨胸喷奶水视频www免费| 久久国产精品免费看| 无人在线观看免费高清视频| 国产在线播放免费| 亚洲国产精品高清久久久| 亚洲国产片在线观看| 国产精品亚洲色图| 另类免费视频一区二区在线观看| 在线观看H网址免费入口| 又大又硬又爽免费视频| 久久精品亚洲中文字幕无码网站| 亚洲不卡视频在线观看| 无码AV动漫精品一区二区免费| 香蕉免费一区二区三区| 在线观看人成网站深夜免费| 国产精品亚洲w码日韩中文| 亚洲第一精品电影网| 羞羞网站在线免费观看| 日韩精品无码免费一区二区三区| 女人被男人躁的女爽免费视频| 国内精品久久久久久久亚洲| 亚洲区视频在线观看| 在线播放免费人成视频网站| 日韩精品免费一级视频| 亚洲毛片av日韩av无码| 国产成人精品日本亚洲网址| aaa毛片免费观看| 毛片免费在线观看网址| 亚洲国产精品一区二区成人片国内 | 日本中文字幕免费高清视频| 麻豆国产VA免费精品高清在线| 亚洲AV无码国产丝袜在线观看| 色综合久久精品亚洲国产| 国产猛男猛女超爽免费视频|