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#在此基礎上還需要看一下經典的教程,對其有一個完全明瞭的深入理解,同時因爲C#是建立在.net環境之下,所以對.NET的機制也需要有一定的認識,最後我希望對C#有興趣的朋友都能完美的掌握其精華,在.net的劃時代歷程上走出輝煌的一步.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章