我是如何學習c#語言的,勤奮才是王道 第三部分 OOP

來源:互聯網
上載者:User
類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類第三部分 OOP技術類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類類一建構函式與解構函式 編譯器聲明預設建構函式 ?       你可以聲明預設建構函式?       如果你聲明建構函式,那麼編譯器不會聲明建構函式ealed class Pair {     public Pair(int x, int y)     {         this.x = x; //這個表示 當我們建立一個對象(執行個體)的時候,   //this就代表我們建立的當前對象        y = y;     }   建構函式的參數y用欄位y來賦值。編譯器通過的原因是欄位y已經被賦初值。其實,如果沒有對欄位y進行初始化,編譯器仍然會通過,困為欄位y已有預設值0,所以在建構函式中沒有顯式初始化欄位y是不會發生錯誤的。二介面三繼承四多態 第一 通過重載來實現 第二 通過虛擬方法+繼承來實現      定義一個基類,裡面只是大體的描述事物,方法定義為虛擬(vitual)。相當於一個總體架構在需要的時候我們可以派生很多不同功能的衍生類別,對基類的被聲明為虛擬方法 覆蓋(overridden) 每一個衍生類別都可以使用相同的函數名這樣多個衍生類別便實現了多態注意:如果要重寫 覆蓋 虛擬方法 必須在衍生類別中用關鍵字override第三 抽象類別(專門為 派生或繼承 服務的)我們可以定一個抽象類別,專門用於繼承 多態,只對抽象類別做最基礎的描述例如抽象類別 動物  只定義一些所有動物都有的一些屬性和方法抽象類別必須對類名和方法都使用關鍵字abstract因為抽象類別是專門為繼承 或派生 服務的, 所以不要將其生命為sealed(密封)        密封類和普通類一樣,只是不能被派生或繼承密封類(sealed)的資料成員不能聲明為protected五異常處理1異常處理可以提供一個良好的與使用者互動的能力如果不用異常處理 當使用者輸入錯誤的時候將會出現一個晦澀難懂的錯誤提示 並終止程式例如using System;class 1{ public static void Main() { int[] myArray = new int[5]; try  {   for(int ctr = 0;ctr<10; ctr++)             {      myArray[ctr] = ctr;     }   }   catch     {      Console.WreteLine("輸入錯誤了,快點檢查一下吧");     } } }當發生異常的時候,程式會立刻跳到catch語句,而不是報錯並停止程式下面是一個巧用異常的情況計算z= 根號下[(x的平方-y的平方)的絕對值] + xflort x,y,z;try   {     z = Math.Sqrt(x*x-y*y);   }catch    {      z=Math.Sqrt(y*y-x*x);    }finally             {      z=z+x;     }  使用者只需要輸入x y的值,這是一種求絕對值得方法第二個catch語句配合達到取絕對值的目的 上面的程式只是用catch捕獲異常,還可以在catch中包含參數來確定引發的是那種異常catch (System.Excption e){}使用這種方法,系統會採用預設設定好的一些異常處理Excption是系統預定義的處理異常的一個類這裡e是一個Exception類型的變數這裡e代表一些資訊 至於是什麼資訊 我們不能自己定義由系統自己尋找,並輸出相應的資訊using System;class 1{ public static void Main() { int[] myArray = new int[5]; try  {   for(int ctr = 0;ctr<10; ctr++)             {      myArray[ctr] = ctr;     }   }   catch (System.Excption e)     {      Console.WreteLine("輸入錯誤了,快點檢查一下吧:\n{0}", e);     } } }2finally不管try語句是否成功執行,都會執行finally語句,如果有的話3公用異常類C# 中的異常用於處理系統級和應用程式級的錯誤狀態,它是一種結構化的、統一的和型別安全的處理機制。C# 中的異常機制非常類似於 C++ 的異常機制,但是有一些重要的區別: 在 C# 中,所有的異常必須由從 System.Exception 派生的類類型的執行個體來表示。在 C++ 中,可以使用任何類型的任何值表示異常。在 C# 中,利用 finally 塊(第 8.10 節)可編寫在正常執行和異常情況下都將執行的終止代碼。在 C++ 中,很難在不重複代碼的情況下編寫這樣的代碼。在 C# 中,系統級的異常如溢出、被零除和 null 等都對應地定義了與其匹配的異常類,並且與應用程式級的錯誤狀態處於同等地位。 System.ArithmeticException在算術運算期間發生的異常(如 System.DivideByZeroException 和 System.OverflowException)的基類。System.ArrayTypeMismatchException當儲存一個數組時,如果由於被儲存的元素的實際類型與數組的實際類型不相容而導致儲存失敗,就會引發此異常。System.DivideByZeroException在試圖用零除整數值時引發。System.IndexOutOfRangeException在試圖使用小於零或超出數組界限的下標索引數組時引發。System.InvalidCastException當從基底類型或介面到衍生類別型的顯式轉換在運行時失敗時,就會引發此異常。System.NullReferenceException在需要使用引用對象的場合,如果使用 null 引用,就會引發此異常。System.OutOfMemoryException在分配記憶體(通過 new)的嘗試失敗時引發。System.OverflowException在 checked 上下文中的算術運算溢出時引發。System.StackOverflowException當執行堆棧由於儲存了太多掛起的方法調用而耗盡時,就會引發此異常;這通常表明存在非常深或無限的遞迴。System.TypeInitializationException在靜態建構函式引發異常並且沒有可以捕捉到它的 catch 子句時引發。 4多個catch語句,系統會按照順序執行,我們可以把自訂的一些專用異常程式放在前面,如果處理失敗,可以在最後放一個通用的異常處理語句兩個catch語句的順序很重要 前面只能放具體的處理後面放較通用的異常,不可改變順序如果發生了數組下標溢出錯誤會輸出專用於處理數組下表溢出的系統異常//這裡沒有輸出e的資訊第二個catch處理是綜合的,是為了防止其他錯誤如果沒有出現溢出錯誤,而出現其他錯誤,比如除數為零則系統不會執行第一個catch語句,而執行的二個catch語句輸出結果輸入錯誤了,快點檢查一下吧:System.DivideByZeroException:Attempted to divide by zero//這個是系統自己定義的輸出資訊第二種方法throwusing System;class 1{ public static void Main()    { int[] myArray = new int[5];         Console.WriteLine("..."); .....//相關程式if(){ throw(new DividByZeroException() ); }    }        }                不要忘記new 關鍵字 ,吧上面格式記住而且throw語句一般與if結合使用5自訂異常六 Object 基類c#中所有的類都是從Object派生而來,它是.NET 架構類階層的根類任何東西都是ObjectObject由兩個方法,GetType  ToString前者返回 一個對象(執行個體)de資料類型後者返回一個表示當前對象的名字(字串)任何對象都可以使用這兩個方法我們甚至可以把一個常量pi聲明為類using System;sealed class PI{ public static float nbr;  static public float val(){ return(nbr); }static PI()  {  nbr = 3.1415926F;}}class 1{  public static void Main() {Object x = new PI();Console.WriteLine("Tostring:{0}" ,    x.Tostring());Console.WriteLine("Type:{0}"     ,    x.GetType());Console.WriteLine("Tostring :{0}",  123.Tostring());Console.WriteLine("Type:{0}"     ,  123.Gettype());輸出結果:tostring: PIType:PIToString:123Type:System.Int32因為Object是所有類的基類 所以可以定一個Object類型的變數並將其指向PI類x的類型是PI 對x使用ToString之後得到的是PI後面兩句分析:因為c#中所有的東西都是對象,都是由Object 派生而來的123這些數字也不例外 }}七裝箱與拆箱(boxing unboxing)在六中,我們說,所有的東西都是由Object派生而來的,c#中的一切都是對象,這樣說不是很準確,應該是 都可以看做是對象前面的123 其實 是吧字面數值 隱式轉換成 對象了裝箱概念:把實值型別轉換成參考型別(對象)拆箱概念:把參考型別顯示的轉換成實值型別      裝箱會在我們用的時候系統會自動完成       拆箱必須是顯示       被拆箱的值必須儲存到相應的資料類型變數中八is as 關鍵字
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.