乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      .NET面試筆試中的對象

       雄Frank 2012-02-13

      http://book.51cto.com/art/201009/224017.htm

      第4章  面向對象程序設計

      本章覆蓋了.NET面試筆試中的對象、事件和委托等方面的題目。這一類題目屬于實戰(zhàn)類問題,涉及的知識點在面試中經常會出現(xiàn),但有不少程序員無法正確回答此類問題。建議讀者在實際研發(fā)的過程中,多多反思本章列出的各類題目,以期加強對這些問題的理解。

      4.1  對象(1)

      C#是主流的面向對象編程語言之一,它不僅語法簡潔優(yōu)美,而且它完美地支持面向對象的封裝、繼承和多態(tài),在使用面向對象編程語言開發(fā)之前,筆者提倡先了解掌握面向對象的編程思想。在本節(jié)中,將集中講解覆蓋.NET面試中和面向對象思想有關的面試題。本節(jié)也是比較重要的章節(jié)之一,希望讀者能認真閱讀本章節(jié)的內容。

      面試題46  類和結構有什么區(qū)別

      這是一個關于C#語法的面試題,了解和記住這樣的語法并不困難。但建議讀者在得知答案后反復推敲類和結構的特性,充分掌握它們的特性。

      【出現(xiàn)頻率】★★★★★

      【關鍵考點】

      結構

      【考題分析】

      在C#中,類是功能最為強大的數(shù)據(jù)類型,類定義了數(shù)據(jù)類型的數(shù)據(jù)和行為。程序員可以創(chuàng)建類的實例對象。下面代碼展示了一個標準的C#類。

      1. public class MyClass  
      2. {  
      3.     public string name;                 //定義字段  
      4.     public MyClass()                        //構造方法  
      5.     {  
      6.         name = "unknown";  
      7.     }  
      8.     public void SetName(string newName) //無返回值的普通方法  
      9.     {  
      10.         name = newName;  
      11.     }  

      C#中的結構是使用struct關鍵字進行定義的,結構是值類型。下面代碼展示了一個標準的C#結構。

      1. public struct Book                      //定義一個結構  
      2. {  
      3.     /*定義結構中的成員變量*/  
      4.     public decimal price;  
      5.     public string title;  
      6.     public string author;  

      結構與類有以下3個方面的區(qū)別

      結構是值類型,而類是引用類型。

      結構不能被另外一個結構或者類繼承,自身也不能被繼承。而類完全可以被其他的類繼承,其自身也能被繼承。

      結構沒有默認的構造函數(shù),也沒有析構函數(shù),并且不能有protected修飾符,但可以不使用new進行初始化。而類有默認的構造函數(shù),也有析構函數(shù),還有protected修飾符,并且必須使用new進行初始化。

      注意:結構不能直接被類或結構繼承,但結構能夠繼承接口。

      【答案】

      雖然結構與類的初始化都能使用new操作符,但它們之間的差別較大,主要體現(xiàn)在3個方面:結構是值類型,而類是引用類型;結構不能被繼承而類可以;結構與類的內部結構不同。

      面試題47  簡述C#中的虛方法

      C#中的虛方法是最常見的考題之一,應聘者需對這個題目做好充分的準備。本小節(jié)將介紹這方面的知識。

      【出現(xiàn)頻率】★★★★★

      【關鍵考點】

      虛方法(virtual)

      虛方法的實現(xiàn)

      【考題分析】

      使用virtual關鍵字修飾的方法就是虛方法。下面展示一段標準的C#虛方法的實現(xiàn)。

      1. public class contact                    //定義contact類  
      2. {  
      3.     public virtual string print()       //用關鍵字virtual定義一個虛方法  
      4.     {  
      5.         return ("這是虛方法");  
      6.     }  
      7. }  
      8. public class MyClass : contact          //繼承contact類  
      9. {  
      10.     public override string print()      //重寫基類的print()方法  
      11.     {  
      12.         return ("這是新的方法");  
      13.     }  
      14. }  
      15. public static void Main()  
      16. {  
      17.     MyClass m = new MyClass();          //初始化MyClass()方法  
      18.     Console.WriteLine(m.print());       //調用print()方法  
      19.     Console.Read();  

      在上面的代碼中,基類contact定義了一個虛方法print(),而子類里也定義了一個用override 關鍵字修飾的print()方法。當筆者在主程序中調用子類的print()時,程序輸出的結果是:

      1. 這是新的方法 

      可以通過運行結果進行分析,程序調用的是子類的print()方法,而不是基類的print()方法,說明override關鍵字的作用是覆蓋基類的虛方法。當然程序員也可以注銷子類中的print()方法,再次運行上面的代碼,程序輸出結果是:

      1. 這是虛方法 

      此次程序調用的是基類print方法,說明虛方法提供了實現(xiàn)部分,當子類沒有重載基類的方法,默認調用的就是基類方法中的實現(xiàn)部分。

      注意:當使用virtual關鍵字修飾符后,不允許再同時使用abstract、static或override關鍵字進行修飾。

      【答案】

      使用virtual關鍵字修飾的方法就是虛方法,虛方法(virtual)的關鍵字用于修飾屬性、方法、索引器或事件聲明,并使它們可以在派生類中被重寫。虛方法必須并提供派生類覆蓋該方法的選項,并且必須有實現(xiàn)部分。虛方法的作用是可以在派生類中被重寫。

       

      4.1  對象(2)

      面試題48  簡述C#中的密封類和密封方法

      C#中的密封類和密封方法是一個語法類的面試題,也是最常見的考題之一。本小節(jié)將重點介紹這方面的知識。

      【出現(xiàn)頻率】★★★★★

      【關鍵考點】

      密封類

      密封方法

      【考題分析】

      密封類使用sealed關鍵字進行修飾,它不能用作其他類的基類,并且它沒有派生類。下面是一段簡單的實例代碼。

      1. class A {}                  //定義一個普通的class  
      2. sealed class B : A {}       //定義密封類  
      3. class C : B {}              //下面是錯誤的代碼,
        密封類是不能夠被其他類型繼承 

      密封方法(sealed)是使用sealed關鍵字進行修飾的方法,它并不影響類的繼承,但它可以防止重寫基類中特定的虛方法。下面是一段簡單的實例代碼。

      1. class A  
      2. {  
      3.     protected virtual void F() { Console.
        WriteLine("A.F");}//定義一個虛方法  
      4. }  
      5. class B : A  
      6. {  
      7.     sealed protected override void F() {
        Console.WriteLine("B.F");}  
      8.                                                     
        //定義密封方法  
      9. }  
      10. class C : B  
      11. {  
      12.     //下面是一段錯誤的代碼,密封方法不能夠重寫  
      13.     protected override void F() { Console.WriteLine("C.F"); }  

      【答案】

      密封類使用sealed關鍵字進行修飾,它不能用作其他類的基類,并且它沒有派生類。密封類的作用是防止其他類繼承該類。密封方法是使用sealed關鍵字進行修飾的方法,它并不影響類的繼承,但它可以防止重寫基類中特定的虛方法。

      面試題49  請介紹C#中靜態(tài)類構造方法的特點

      C#中靜態(tài)類構造方法及特點是一道常見的面試題,靜態(tài)類構造是很有用的一個功能,程序員應該掌握這方面的應用。本小節(jié)將簡單地介紹靜態(tài)類中的構造方法。

      【出現(xiàn)頻率】★★★★★

      【關鍵考點】

      靜態(tài)類

      構造方法

      構造方法的特點

      【考題分析】

      構造方法是一種特殊的方法,一般用于初始化對象,并且在類實例化之前執(zhí)行,用于完成對象創(chuàng)建前所需的相關設定。構造方法也稱為構造函數(shù),只要創(chuàng)建類或結構,就會調用它的構造函數(shù)。類或結構可能有多個接收不同參數(shù)的構造函數(shù)。

      下面的示例代碼展示了一個構造方法。

      1. class StaticSimple  
      2. {  
      3.     public static int k =100;               //定義靜態(tài)變量  
      4.     static StaticSimple()                   //創(chuàng)建
        自定義的靜態(tài)構造方法  
      5.     {  
      6.         Console.WriteLine("請注意方法的執(zhí)行順序。");  
      7.     }  
      8.     //注釋的這段代碼是錯誤的代碼,在一個類里只允許有一
        個無參的靜態(tài)構造方法  
      9.     //static StaticSimple(String str)  
      10.     //{  
      11.     //  Console.WriteLine("在一個類里只允許有一個
        無參的靜態(tài)構造方法。");  
      12.     //}  
      13.     public StaticSimple()               //定義無
        參的構造器,同時給j和s賦值  
      14.     {  
      15.         Console.WriteLine("這是無參構造器");  
      16.     }  
      17. }  
      18. class Program  
      19. {  
      20.     static void Main(string[] args)  
      21.     {  
      22.     //先調用靜態(tài)成員k的值,結果會是先執(zhí)行靜態(tài)構造方
        法,再顯示
        k=100 
      23.     Console.WriteLine("讀者請注意,在輸入k值請是
        否有其他的輸出。
        k=" + Static  
      24.     Simple.k);  
      25.     //此時不會再出現(xiàn)static構造器的內容,因為前面已經執(zhí)行了一次  
      26.     StaticSimple A = new StaticSimple();  
      27.     Console.Read();  
      28.     }  

      通過運行上面的代碼可以發(fā)現(xiàn),C#中的構造方法有以下4個特點。

      只允許有一個無參的靜態(tài)構造方法在一個類中存在。

      靜態(tài)的構造方法不會被繼承。

      在所有靜態(tài)成員被引用之前執(zhí)行靜態(tài)構造方法。

      在所有的構造方法中最先被執(zhí)行的是靜態(tài)的構造方法。

      說明:靜態(tài)構造方法,是在構造方法的名字前使用static關鍵字修飾符的構造方法。

      【答案】

      C#中靜態(tài)類構造方法主要有4大特點,靜態(tài)構造方法最主要的特點是:靜態(tài)的構造方法是最先被執(zhí)行的構造方法,并且在一個類里只允許有一個無參的靜態(tài)構造方法。

      4.1  對象(3)

      面試題50  簡述C#派生類中的構造函數(shù)

      這個問題是一道基礎的面試題,主要考察應聘者對派生類和構造方法的概念。本小節(jié)將簡單地介紹派生類與構造方法。

      【出現(xiàn)頻率】★★★★

      【關鍵考點】

      派生類

      構造方

      【考題分析】

      派生類中的對象不但包含從基類繼承的成員對象,也包含了局部定義的成員對象。這時會出現(xiàn)一個問題:基類中有一部分構造函數(shù),而在派生類中也有一些構造函數(shù),當創(chuàng)建派生類對象時,到底運行的是那些構造函數(shù)呢?帶著這個問題先看下面一段代碼。

      1. class Circle  
      2. {  
      3.     public Circle()                         //默認構造函數(shù)  
      4.     {  
      5.         Console.WriteLine("基類無參構造方法。");  
      6.     }  
      7.     public Circle(double initialRadius) //帶一個參數(shù)的構造函數(shù)  
      8.     {  
      9.         Console.WriteLine("基類有參構造方法。");  
      10.     }  
      11. }  
      12. class UnitCircle : Circle                   //派生類  
      13. {  
      14.     public UnitCircle(double unitRadius) :base(unitRadius) {}  
      15.                                             //調用基類的構造函數(shù)  
      16.     public UnitCircle():this(1,2)           //調用本類中的構造函數(shù)  
      17.     {  
      18.         Console.WriteLine("派生類無參構造方法。");  
      19.     }  
      20.     public UnitCircle(int i,int j)          //定義
        一個帶兩個參數(shù)的構造函數(shù)  
      21.     {  
      22.         Console.WriteLine("派生類有參構造方法。"+i.ToString());  
      23.     }  
      24. }  
      25. class Program  
      26. {  
      27.     static void Main(string[] args)  
      28.     {  
      29.             UnitCircle u = new UnitCircle();    //調用
        派生類中的無參構造函數(shù)  
      30.         UnitCircle u1 = new UnitCircle(2);  
      31.                                         //調用派
        生類中的有一個參數(shù)的構造函數(shù)  
      32.         Console.Read();  
      33.     }  

      運行上面的代碼,請讀者注意base與this這兩個關鍵字的作用:

      1. public UnitCircle(double unitRadius) :base(unitRadius) {} 

      派生類中的base關鍵字表示當調用UnitCircle(double unitRadius)構造函數(shù)時,它實際調用的是基類中的Circle(double initialRadius)構造函數(shù)。

      而派生類中的this關鍵字表示當調用的構造函數(shù),是本派生類中的構造函數(shù)。

      1. public UnitCircle():this(1,2) 

      【答案】

      使用C#派生類中的構造函數(shù)時,需要注意關鍵字base與this的區(qū)別,關鍵字base表示調用基類中的構造函數(shù),而this表示調用本類中的構造函數(shù)。

      面試題51  簡述接口及接口繼承

      在大多數(shù)面向對象的語言中,都有接口這個概念,這些機制是設計高可擴展性的面向對象程序的基礎。讀者應該做到不僅了解它們的功能、讀懂包含這些概念的代碼,也能進一步地運用它們設計出面向對象的程序。

      【出現(xiàn)頻率】★★★★★

      【關鍵考點】

      接口(Interface)

      接口特性

      接口繼承

      【考題分析】

      接口是面向對象編程思想重要特性之一,接口是當把多個繼承類中的公共對象部分抽象出來、并封裝這些公共對象的行為。接口是為了繼承而存在的,如果沒有繼承,也就不需要接口的存在。

      注意:在C#中,類可以通過繼承多個接口來豐富自己的行為機制,但類是不可以繼承多個類的。

      在C#中,接口具有以下9大特性。

      接口只定義,不包含方法的實現(xiàn)。

      接口可以包含方法、屬性、事件和索引器。

      接口成員必須是公共的。

      接口不能被直接實例化。

      接口不能包含任何字段。

      接口描述可屬于任何類或結構的一組相關行為。

      接口自身均可以從多個接口繼承。

      類和結構均可以從多個接口繼承。

      接口類似于抽象類,但繼承接口的類型必須實現(xiàn)接口中的所有定義的成員對象。

      下面代碼實現(xiàn)了一個簡單的信號燈功能,代碼如下:

      1. interface ITrafficRule                      //定義
        一個接口(交通規(guī)則)  
      2. {  
      3.    void CrossTheRoad(int trafficLight);     //定義
        一個方法(十字路口)  
      4. }  
      5. public class MyPupil : ITrafficRule  
      6. {  
      7.     public void CrossTheRoad(int trafficLight)  
      8.                                             //實現(xiàn)
        十字路口的信號燈功能的方法  
      9.     {  
      10.         switch (trafficLight)  
      11.         {  
      12.         case 0:                             //紅燈停  
      13.         …  
      14.         break;  
      15.         case 1:                             //黃燈等一等  
      16.          …  
      17.         break;  
      18.         case 2:                             //綠燈行  
      19.         …  
      20.         break;  
      21.         default:                //當信號故障,且
        兩側沒有直行車輛時,可以穿過馬路  
      22.         …  
      23.         break;  
      24.         }  
      25.     }  

      在代碼中,筆者首先定義了一個信號燈規(guī)則的接口,隨后在接口中定義了一個實現(xiàn)信號的方法。代碼如下:

      1. interface ITrafficRule  
      2. {  
      3.     void CrossTheRoad(int trafficLight);        
        //定義一個方法(十字路口)  

      注意:在筆者定義的接口中僅僅是聲明定義了一個方法,并沒有任何代碼功能的實現(xiàn)。信號燈功能的實現(xiàn)是在它的繼承類MyPupil中實現(xiàn)。結合前面對接口及接口繼承的特性的說明,就不難理解這段實例代碼。

      【答案】

      接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合。當定義了接口,就必須在繼承類中實現(xiàn)它,這樣類就支持接口中所指定的所有屬性和成員。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多