C++程式員快速學習C#---(三)完

來源:互聯網
上載者:User
c++|程式|程式員 八.類 
對於物件導向語言來說,類是重頭戲,C#中類的使用和C++中類似,在細節方面有些差別. 
首先來看一個C#的類的例子: 
例: 
class myclass:mybasicclass   //注意基類不需要寫限定符 
    { 
        private int a; 
        public int num() 
         { 
             return 0; 
         } 
    } 
public class mybasicclass 
    { 
    } 
這裡寫出了一個類的限定符public,C#還有的限定符: 
internal:只能在當前工程中使用,當class前預設限制符時就預設為此限制符 
public:可以在任何工程中使用 
abstract (抽象的):類不能執行個體化,只能繼承,可以有抽象成員 
sealed (密封的):不能繼承 
關鍵字能夠相互組合. 
首先需要知道一點,C#中只能有一個基類,它不支援多重繼承,同時不允許衍生類別的可訪問性比其基類更高,也就是說:內部類可以繼承於公用類,反之不行,在前文也已經說過,object類是C#中最高的類,如果一個類沒有基類,它就隱式的繼承了object類,在類中都可以使用object提供的方法. 
也許你還記得在C++中,類裡面定義的方法的具體實現是在類的外部實現的,但在C#中已經不允許,C#規定所有的代碼都必須在類中,所以方法的代碼就只能和C++中的內嵌函式的格式一樣,但是切記,C#中的這樣寫法並不意味著是內聯的,在C#中已經取消了內嵌函式的定義,.net會在編譯的時候自動確定是否內聯. 
從上面的例子中還能發現一個不同點就算是:在類定義結束的時候沒有了分號; 
從現在開始,從細節上闡述C#的不同用法: 
1.       在C++的名詞成員變數,在C#中稱為欄位,欄位在C++中不能初始化,但在C#中可以直接初始化, 
2.       建構函式,它於C++使用相似,但是不允許在其中給欄位初始化,C#還添加了一種靜態建構函式 
public class mybasicclass 
    { 
        static mybasicclass() 
        { 
        } 
    } 
    它不需要限定符,它的作用是在程式運行是對靜態變數進行賦值 
3.     解構函式:它和C++的概念已經完全不同了,因為C#內部有了記憶體自動收集機,能夠對不用的記憶體進行回收,所以不需要在解構函式中釋放記憶體了.也就無需解構函式,但是解構函式在派生於介面的類中函數有作用的,介面的概念後面會講到 
4.     虛擬函數:C#的虛擬函數同C++在文法上有區別,但是含義還是一樣的.C#中基類的虛擬函數使用關鍵字virtual 在衍生類別中使用override 
5.     運算子多載:C#中運算子多載和C++原理基本相同,但存在一些區別,區別在於有些運算子C#已經不允許重載了.不能重載的運算子有:-= , += , /= ,*= ,%=, 按位賦值運算子(&= ……) , 布林運算子(&&……),賦值運算子(=).同時在C#中還有一個硬性的規定,比如重載了運算子> 就必須重載>= ,重載了== ,就必須重載 !=  反之毅然,當然不止這些還有< <= 等等 

九.異常 
C#和C++的異常基本相同: 
C#的異常語句: 
try 


    catch 


    finally 


它們的不同點最主要的就是,不管是否拋出異常,最後的finally塊一定馬上執行. 

十.不安全的程式碼 
什麼是不安全的程式碼,前面我已經說過,使用指標就是不安全的程式碼,在C#中是可以使用指標的,而且它和C++的格式一樣,但是必須放在不安全的程式碼段中. 
聲名不安全的程式碼段,使用關鍵字unsafe . 
例 
public unsafe int num() 

    return 0; 

不安全的程式碼可以是方法,類,結構 
十一.介面 
在C++中是沒有介面這個概念的.它是有COM演變而來.一個C#介面只是函數和屬性的定義.就好比一個抽象類別.它的定義和類採用相似的文法.使用關鍵字interface 
類對介面的實現是通過派生來實現的,對於介面,類可以多重繼承. 

後記. 
到這裡我就準備停筆了,也許你會發現類以後的內容變的簡單了,不詳實了,的確這於我剛開始的初衷有些背離,但這也是有原因的.首先就是我在寫第三篇的時候發現在<<C#進階編程>>一書的附錄部分已經有了C++程式員過渡C#的內容,而且比較詳細,大家可以參看此書,我只是把裡面大家經常會用到的文法進行了闡述,對於一些不常用到,大家可以通過專門的C#書籍進行詳細的瞭解.第二.在類之後的內容有許多講的都是C++不具備的內容,這些內容的講解也無法和C++進行比較來講,所以也沒有什麼捷徑,只能看C#的專業書籍進行學習,比如介面,委託,甚至類中的一些用法,還有我沒有提到的屬性,事件.通過此文學習可以在對C#一竅不通的情況下快速通過已學知識對其有所瞭解和掌握,但是一門語言是博大精深的,所以學習C#在此基礎上還需要看一下經典的教程,對其有一個完全明了的深入理解,同時因為C#是建立在.net環境之下,所以對.NET的機制也需要有一定的認識,最後我希望對C#有興趣的朋友都能完美的掌握其精華,在.net的劃時代曆程上走出輝煌的一步. 

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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