1、類與對象
類是面向對象編程的基本單元;類造出來的變量叫對象。
一個類包含倆種成員:字段與方法。
字段即變量,方法即函數。
面向對象思想:教給我們如何合理的運用類的規則去編寫代碼。
2、類的字段
字段代表了類中的數據。在變量之前可以加上public、private和protected表示字段的訪問權限。
3、類的方法
(1)、函數的概念
表達式:
返回值類型 方法名(參數列表)
{
語句1;
語句2;
.....
return 表達式;
}
函數需要向外界返回一個值,由return語句實現。
如果一個函數沒有返回值或不關心其返回值,則將其返回值定義為void。
(2)、方法的定義與使用
放在一個類中的函數(通常附加一個存取權限修飾符如public和private)稱為“方法”。
訪問一個 方法 的最基本方式是通過類創建的對象;則可以通過使用new關鍵字創建類的對象來訪問此方法。
(3)、方法重載
兩個同范圍(同一個類,或者父子類中)兩個同名但參數類型不同或者參數個數不同的方法互相間構成重載關系。
兩個構成重載關系的函數必須滿足:
函數名相同。
參數類型不同,或參數個數不同。(* 函數返回值類型的不同不是函數重載的判斷條件)
這兩個同名的函數彼此構成了“重載關系”。
輸出:
輸出(帶參數):
4、類的靜態成員
類中的函數,如果在聲明時沒有加“static”關鍵字,則稱之為類的“實例方法”。
加了“static”關鍵字的方法,則稱之為類的“靜態方法”。
加了“static”關鍵字的字段,則稱之為字段的“靜態字段”。
靜態成員是不隨着new的對象初始化,直接跟着類名走。
靜態成員:不隨着造對象初始化,所有對象共享直接通過類名調用
(1)、訪問類的靜態成員的基本方法
類名.靜態方法名(參數列表)
(2)、類靜態成員的特性
類的靜態成員是供類的所有對象所共享的。
函數也可以用靜態成員
(3)、類實例成員與靜態成員的訪問規則
位於同一類的實例方法可以直接互相調用。
類的字段(包括實例字段和靜態字段)可以被同一類中的所有實例方法直接訪問、
類中的靜態方法只能直接訪問類靜態字段;要訪問實例方法,要在靜態方法中創建對象。
5、類的屬性
屬性是一種特殊的“字段”
屬性由兩個特殊的讀訪問器和寫訪問器組成。
當讀取屬性時,讀訪問器被調用,僅簡單地向外界返回私有字段的值。
當設置屬性時,寫訪問器別調用,先檢查外界傳入的值是不是空串,再將傳入的值保存於私有字段中。
在讀訪問器中有一個特殊的變量value必須特別注意,代表了外界傳入的值。
編寫屬性的方法:
(1)、設計一個私有的字段用於保存屬性的數據 。
(2)、設計get讀訪問器和set寫訪問器存取私有字段數據。
6、深入理解類與對象
(1)、類和對象的區別
對象是以類模板創建出來的。類與對象之間是一對多的關系。
在C#,使用new關鍵字創建對象。
在程序中“活躍”的是對象而不是類。
---“對象”與“類的實例”這兩個概念是等同的
(2)、類的構造函數(一般用於初始化類的私有數據字段)
當使用new關鍵字創建一個對象時,一個特殊的函數自動調用,這就是類的構造函數。
在C#中,類的構造函數與類名相同,沒有返回值。
帶()的都是函數
構造函數每個類至少有一個構造函數,名字與類名同名;都是可以重載的。
凡事構造對象,都是通過先調用構造函數造出來的
一般用於給成員賦初始值
用於跨類之間數據傳輸
帶參數的構造函數
(3)、引用類型與值類型
區別:
值類型的變量一定義之后就馬上可用。
引用類型的變量定義之后,還必須用new關鍵字創建對象后才可以使用。
C#的所有值類型均隱式派生自System.ValueType:
- 結構體:struct(直接派生於System.ValueType);
- 數值類型:
- 整 型:sbyte(System.SByte的別名),short(System.Int16),int(System.Int32),long (System.Int64),byte(System.Byte),ushort(System.UInt16),uint (System.UInt32),ulong(System.UInt64),char(System.Char);
- 浮點型:float(System.Single),double(System.Double);
- 用於財務計算的高精度decimal型:decimal(System.Decimal)。
- bool型:bool(System.Boolean的別名);
- 用戶定義的結構體(派生於System.ValueType)。
- 數值類型:
- 枚舉:enum(派生於System.Enum);
- 可空類型(派生於System.Nullable<T>泛型結構體,T?實際上是System.Nullable<T>的別名)。
值類型(Value Type),值類型實例通常分配在線程的堆棧(stack)上,並且不包含任何指向實例數據的指針,因為變量本身就包含了其實例數據
C#中的引用類型:
- 數組(派生於System.Array)
- 用戶用定義的以下類型:
- 類:class(派生於System.Object);
- 接口:interface(接口不是一個“東西”,所以不存在派生於何處的問題。Anders在《C# Programming Language》中說,接口只是表示一種約定[contract]);
- 委托:delegate(派生於System.Delegate)。
- object(System.Object的別名);
- 字符串:string(System.String的別名)。