八.類
對於物件導向語言來說,類是重頭戲,c#中類的使用和c++中類似,在細節方面有些差別.
首先來看乙個c#的類的例子:
例:class myclass:mybasicclass //注意基類不需要寫限定符
} 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
} 它不需要限定符,它的作用是在程式執行是對靜態變數進行賦值 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()
不安全**可以是方法,類,結構
十一.介面
在c++中是沒有介面這個概念的.它是有com演變而來.乙個c#介面只是函式和屬性的定義.就好比乙個抽象類.它的定義和類採用相似的語法.使用關鍵字inte***ce
類對介面的實現是通過派生來實現的,對於介面,類可以多重繼承.
到這裡我對c#的學習介紹即將結束,你會發現到第三節的內容可能講的簡單了,不夠詳細,但這有一定的原因,大家可以在《c#高階程式設計》一書的附錄部分有c++程式設計師過渡到c#的內容,而且更加詳細,大家可以細心研究一下,我在這裡只是對大家經常用到的語法進行了闡釋,對於一些不常用的大家可以通過c#的專業書籍進行學習,畢竟我這裡只是入門,其次在在類之後的內容有許多講的都是c++不具備的內容,這些內容的講解也無法和c++進行比較來講,所以也沒有什麼捷徑,只能看c#的專業書籍進行學習,比如介面,委託,甚至類中的一些用法,還有我沒有提到的屬性,事件.通過此文學習可以在對c#一竅不通的情況下快速通過已學知識對其有所了解和掌握,但是一門語言是博大精深的,所以學習c#在此基礎上還需要看一下經典的教程,對其有乙個完全明了的深入理解,同時因為c#是建立在.net環境之下,所以對.net的機制也需要有一定的認識,最後我希望對c#有興趣的朋友都能完美的掌握其精華,在.net的劃時代歷程上走出輝煌的一步.
AJAX學習之路(三)
html 建立元素,屬性,文字 remove 刪除自已及其後代節點 val 獲取value屬性的值 val 設定value屬性值為 空串,相當於清空 text 獲取html或xml標籤之間的值 text 設定html或xml標籤之間的值為 空串 clone 只複製樣式,不複製行為 clone tru...
python學習之路(三)
反思自己學習python的目的 首先,我得談談自己為什麼要學習程式設計。然後,我得談談自己為什麼要學習python。說出來不怕大家笑話,開始自己學習程式設計是有點功利心的,但我想賺錢真的是我學習程式設計的目的嗎?那賺錢之後呢,好好孝敬父母?孝敬父母之後呢,娶媳婦?娶媳婦之後呢,生娃?生娃之後呢,學程...
thinkphp學習之路(三)
1 例項化基礎模型 model 類 在沒有定義任何模型的時候,可以使用下面的方法例項化乙個模型類 來進行操作 user new model user user select 進行其他的資料操作 或者使用m快捷方法進行例項化,其效果是相同的。user m user user select 進行其他的資...