類:兩個理解角度,
* 用來描述問題域的抽象
* 用來建立物件的藍圖。
類的構成:
class name
例項方法:
同乙個類的不同物件共享同一方法的拷貝,編譯器會將物件作為乙個引數暗自傳送給例項方法。
而不是為每個例項都建立乙個拷貝,從而節省資源。
方法引數:
1. ref 引用型別引數
2. out 也是引用型別引數,但是可以使用尚未賦值的變數
3. 引數陣列的問題:可以接受不同數量的引數,即用任意多個和引數陣列型別相同的變數作為引數
只能寫在引數的最末乙個(int a,int b, params int number)
只能是一維陣列 int[,]不可用,int可以
不能與ref/out 同時使用
方法過載: 過載的條件是方法訊號不同,方法訊號包括方法名字,引數數量、型別和順序
返回型別,params 引數,形式引數的名字都忽略。
this 的使用情況:
區分形式引數、本地變數與例項變數
將當前物件的引用作為乙個引數傳遞給另乙個方法
將當前物件的引用 返回給此方法的呼叫者
建構函式:
* 如果類中包含乙個或多個例項建構函式,那麼編譯器不會為類新增預設的建構函式。
* 在全是靜態成員的類中,也可以使用private的建構函式
* 可以定義靜態的建構函式,用於執行在第乙個例項物件建立前要做的事情。不能新增訪問修飾符和參 數,其形式為 static classname() ,由執行時自動呼叫。
* 通過使用建構函式初始化器(: this( parma1,param2...))可以減少不同建構函式中包含重複**
唯讀成員與常量的異同:
同:都用來表示乙個不變化的值
異:常量在源**中指定值,唯讀成員在執行時賦值,比如銀行賬號就適合作為唯讀變數在建立時構造 函式中賦值。
析構函式:
在c#中,一般是不用程式設計師去編寫gc或者析構函式的,系統會自動進行垃圾**。如果寫了析構函式,反而會影響效率。只有在處理特定的資源時,比如非託管**的資源時,可以自己編寫析構函式來釋放資源。
dipose:用於釋放非記憶體有限資源的釋放。可以擺脫析構函式執行的不定時性。
為了避免因dispose和析構函式刪除同一物件兩次引起的執行時錯誤,可以在dispose方法中使用gc.suppressfinalize
如何編寫直觀易懂的**:
屬性的使用,在功效上和訪問器相同,因為內聯技術甚至更快,但是使用混合get、set的屬性可以使的對物件私有成員的賦值形式與"="形式儲存一致;而且可以延遲不必要的初始化工作。
索引器的使用, 將集合型別的資料寫成乙個類,並可以新增一些方法,更直觀的是對於這樣的陣列訪問可以使用和陣列形式一致的方式,物件名[索引值],索引值可以是各種型別。
操作符過載:為了保持語義和形式的一致性,操作符過載是乙個不錯的方式,但是有幾點要注意:比較操作符(《和》,>=和《=,==和!=)必須成對過載,二元操作符的話第乙個引數必選是操作符所屬型別。必須宣告為pubic staic
自定義使用者型別準換:
隱式轉換:public static implicit operator type_convert_to(type_convert_from)
顯式轉換:public static explicit operator type_convert_to(type_convert_from
c class 記憶體對齊
今天才算把class 的記憶體對齊又多明白了一點.1.class a char a int b 2.class b char a char b int c 3.class c char a int b char c sizeof a 8 sizeof b 8 sizeof c 12 對於a,由於ch...
C class與記憶體
類名 變數名 棧區 類名 指標名 new 類名 堆區 類的靜態成員 靜態區 類的成員函式,靜態函式都在 區,類的函式都是共享的 共享,所有的類物件共享 const變數在類的外部,一開始必須初始化,用常量強行替換,不讀記憶體 const變數在類的內部,必須構建乙個類才能初始化,const與c語言裡的c...
mysql相關知識 MySQL相關知識
字串拼接 select from tablename where mydata like concat curdate limit 3 這裡concat是字串拼接,concat mys q l mysql 顯示日期不帶時間的函式,如 2015 05 14 curdate 是日期不算時間 2015 0...