類和結構
類和結構實際都是建立物件的模板,每個物件都包含資料,並提供處理和訪問資料的方法。類定義了每個類物件(例項)可以包含什麼資料和功能。
結構在記憶體中的儲存方式、訪問方式和一些特性(結構不支援繼承)與類不同。類是儲存在堆heap上的引用型別,結構是儲存在堆疊stack上的值型別。
類和結構都是使用關鍵字new來宣告例項。
如果是需要乙個小的資料結構,由於效能原因最好使用結構
結構的建構函式是編譯器提供的無引數的預設建構函式。這是不容許改變的。
結構在使用new運算子與其他引用型別的工作方式不同。new不分配堆中的記憶體。 而是呼叫相對應的建構函式
ref引數
通過指傳送變數是預設的,也可以強制使引數通過引用的方法傳送給方法,為此需要使用ref引數,如果把乙個引數傳給方法,且這個方法的輸入引數前面帶有ref關鍵字,則該方法對變數所做的任何改變都會影響原來的物件的值。呼叫該方法的時候也需要新增ref。
out關鍵字
c#要求變數在被引用的時候必須有個初始值。編譯器使用out關鍵字進行初始化,當在方法的輸入引數前面加上out關鍵字時,傳遞給該方法的變數可以不初始化,該變數通過引用傳送,所以在從被呼叫的方法中返回時,方法對該變數的任何變化都會保留下。呼叫時也需要使用out
方法的過載
為了過載方法,只需要宣告同名但引數個數或型別不同即可。使用過載是因為c#不支援可選引數。
構造方法
是乙個與類同名的沒有返回值的方法,也不要void!!!方法都是有返回型別,即使是使用void。
一般情況,如果沒有提供任何建構函式,編譯器會在後台自動建立乙個預設的建構函式。會把所有的成員字段初始化為乙個標準的預設值,如:0或false
可以給建構函式進行任意多個過載。
靜態建構函式
第一使用的時候執行一次,如果多個類都有靜態建構函式,先執行那個都是不確定的。
繼承
實現繼承和介面繼承
實現繼承:表示乙個類派生於乙個基型別,擁有該基型別的所有成員字段。派生型別的每個函式都採用基型別的實現**,除非在派生型別的定義中指定重寫該函式的事項**。在需要給現有的型別新增功能,或許多個相關的型別共享一組重要的公共功能的時候,這種繼承是非常有效的。
介面繼承 乙個型別只繼承了函式的簽名,沒有繼承任何實現**。在需要指定該型別具有某些可用的特性的時候,最後使用這種型別繼承。介面繼承常常被看做是提供了一種契約:讓型別派生於介面,來保證為客戶提供某個功能。
多重繼承:c#不支援多重實現繼承,而允許型別派生於多個介面。這說明,c#可以派生於另乙個類和任意多個介面。
結構不支援實現繼承,但支援介面繼承,構總是派生於system.vlauetype
如果在類定義中沒有指定基類,c#編譯器就假定sysrtem.object是基類。
虛方法
把乙個基類函式宣告為virtual,該函式就可以在任何派生類中重寫。也可以把屬性什麼為virtual,對於虛方法或重寫屬性,語法與非虛屬性是相同的,但要在定義中加上關鍵字virtual。
c#中的虛函式概念與標準的oop概念相同,可以再派生類中重寫虛函式。在呼叫方法時,會對呼叫物件型別的合適方法。在派生類的函式重寫另乙個函式時,要使用override關鍵字顯示宣告。
成員欄位和靜態函式都不能宣告為virtual。因為這個概念只對類中的例項函式成員有意義。
呼叫函式的基類版本
c#有一種特殊的語法用於從派生類中呼叫方法的基本版本:base.()
抽象類和抽象函式
抽象類不能例項化,抽象函式沒有執行**,必須在非抽象的派生類中重寫,顯然,抽象函式也是虛擬的(但不需要提供virtual關鍵字),如果類包含了抽象函式,該類也是抽象的,也必須宣告為抽象的。
密封類和密封方法sealed 對與類,不能繼承該類;對於方法表示不能重寫該方法。
基本概念 C 基本概念
由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...
c 基本概念
1程式設計基礎1.1 基本概念 1.const 的理解 const char char const char const的區別問題幾乎是c 面試中每次都會有的題目。事實上這個概念誰都有只是三種宣告方式非常相似很容易記混。bjarne在他的the c programming language裡面給出過...
c基本概念
程式 計算機能識別和執行的指令,由各種函式組成。c面向過程,可直接操作硬體。pwd 當前工作目錄 cd 不加引數 進root cd folder 進入資料夾 cd 上級目錄 cd 返回root cd 返回上乙個訪問的目錄 rm 檔名 刪除 cat 檔名 less 在終端下檢視檔案 ls 列出目錄下所...