C#學習筆記(一):資料類型
C#資料類型分為兩大類:數實值型別和參考型別;
一、數實值型別包括:整型、字元型、布爾型、浮點類型、小數類型、結構、枚舉
1、整數類型:byte、sbyte、short、ushort、int、uint、long、ulong,常用的是int;
2、浮點類型:float、double;
3、小數類型:dicemal;
4、字元類型:char;
5、布爾類型:bool;
二、參考型別包括:字串、數組、物件類型、類、介面、代理
1、物件類型:object;
2、字串類型:string;
三、賦初值
四、類型轉換:隱式轉換、顯式轉換;打包轉換、拆包轉換
1、隱式轉換:低級資料類型向進階資料類型轉換,結果為進階資料類型;
2、顯式轉換:造型(CAST)
3、打包轉換和拆包轉換:堆(Heap)和棧(Stack)的區別;
五、簡單數值類
1、兩個域:MaxValue和MinValue;
C#學習筆記(二):運算子和運算式
1、算術運算子
1)++、--在變數左右的區別
2)負號運算子:例如-3+-3等同於-3-3
2、邏輯運算子
3、關係運算子
4、其他運算子
1)is運算子:x is int
2)?:運算子:
3)as運算子:
object x = 5.4F;
object y;
y = x as float;
4)typeof運算子:
5、checked和unchecked
C#學習筆記(三):選擇和迴圈結構
1、if語句
1)if(...)
2)if(...) else
3)if(...)
else if(...)
else if(...)
else
注意嵌套的判斷語句,從最內層開始,else總是和他最上面並且沒有配對的if語句配對
2、switch語句
switch(...)
{
case ... :
case ...:
...
default:
}
3、while語句
while(...)
{
....
}
4、do-while語句
do
{
...
}
while(...)
5、for語句
for(...;...;...)
{
...
}
6、foreach-in語句
foreach( ... in ....)
{
.....
}
C#學習筆記(四):數組
1、一維數組
1) int[] intArray = new int[10];
2) int[] intArray;
intArray = new int[10];
3) int[] intArray = new int[10]{1,2,3,4,5,6,7,8,9,0};
注意:不允許初始化部分元素,必須全部初始化
2、多維陣列
1) int[,] intArray = new int[3,2];
2) int[,] intArray;
intArray = new int[3,2];
3) int[,] intArray = new int[3,2]{{0,1},{1,2},{2,3}}
3、嵌套數組
int[][] intArray = new int[2][];
intArray[0] = new int[2];
intArray[1] = new int[3];
4、System.Array類
1、屬性
Length
Rank
2、方法
Sort Reverse
IndexOf LastIndexOf
C#學習筆記(五):物件導向和類
物件導向
1、資料封裝
2、代碼重用
3、多態性
4、重載
命名空間
using [alias=]namespace;
聲明自己的類
1、封裝資料
private int count;
... ...
2、構造和析構
構造:public 類名(...) {...},可存在多個
~類名:析構,一般不需要
3、方法
使用自己的類
域
靜態域:public static int field1;
唯讀域:public readonly int field1;
屬性
修飾符 類型 標識符 {代碼}
private string name;
public string Name
{
get{rerurn name;}
set{name = value;}
}
索引
修飾符 類型 this[索引值]
private int[] Array = new int[5];
public int this[int index]
{
get
{
rerurn Array[index];
}
set
{
Array[index] = value;
}
}
重載
關鍵是參數不一樣
params:後面不能再有其他參數,因此一般是最後一個參數
ref、out:實參前也必須加ref、out關鍵字,ref於out的區別在於out關鍵字不需要實參必須提前初始化
運算子多載
文法:public static 傳回型別 operator 運算子(參數){代碼}
資料轉換也可重載
文法:public static implicit operator 轉換後的類型(被轉換的數值)
public static explicit operator 轉換後的類型(被轉換的數值)
C#學習筆記(六):繼承
繼承的初步
1、派生:
被繼承的類叫基類、父類,繼承而來的類叫衍生類別、子類
class 子類名稱 : 父類名稱
{
.....
}
子類可以重載父類的方法,注意行參的不同
在子類中構造新對象時,不僅要調用子類的構造器,還要調用父類的構造器,並且,這些被調用的構造器必須具有相應的參數列表
2、base關鍵字
子類可以利用父類的各種成員,但是子類只能利用父類中被聲明為public和protected的成員
base關鍵字是為了在子類中替代父類的名稱
3、禁止繼承
封閉類的概念:sealed
sealed關鍵字不僅可以用來聲明類,還可以用來聲明“封閉”的方法和屬性
4、保護訪問
protected關鍵字:只在類的繼承樹鏈上可見
5、內部訪問
internal關鍵字:在一個assembly內部可見
6、成員存取層級
private:私人成員只能在聲明成員的類中使用
protected internal:成員只能在同一個類及其子類中被使用,並且所有在類必須在一個assembly中
internal:在一個assembly中訪問
protected:只能在類繼承樹鏈上被訪問
public:不受限制
多態性和虛成員
1、在父類中利用virtual關鍵字來聲明虛成員,虛成員可以是類的方法、屬性和索引,不可以是域或者私人成員變數
2、在子類中用override關鍵字來重新聲明虛成員
抽象類別
1、abstract關鍵字
2、抽象方法不可以為其執行個體化任何代碼,在方法聲明時,不可以在方法後使用{};
3、抽象屬性需要指出屬性的get或者set部分,但是不能執行個體化任何代碼;
造型
只允許用父類造型子類
C#學習筆記(七):介面和代理
介面
1、介面的聲明
1)文法:[修飾符] interface 介面名稱[:父介面名稱]{代碼};
2)要點:
a、聲明介面成員的時候,不可以為介面成員指明任何存取修飾詞;
b、不可以為成員執行個體化任何代碼
2、介面的使用
1)使用一個介面只有通過類的繼承來實現
2)子類不僅可以從父類繼承,還可以從介面繼承
3)當一個類從介面繼承之後,必須在子類中執行個體化父介面中的所有成員
3、介面與抽象類別的比較
1)在介面中,不能聲明域或者私人變數
2)聲明介面成員時,不能使用任何存取修飾詞
3)介面一旦被繼承,則在子類中必須執行個體化所有成員,而抽象類別則可以根據需要重載部分成員
4)介面允許多重繼承
5)介面相對抽象類別具有更高的抽象層次
4、System命名空間的常用介面
1)ICloneable:Clone方法
2)IComparable:CompareTo方法
3)IConvertable:
4)IFormatable:Format方法
代理
1、代理的聲明
[修飾符]delegate 傳回型別 代理名稱(參數列表);
2、代理的使用
使用new運算子建立一個代理對象,同時為代理對象指明引用的方法名稱
3、System.Delegate類
Method和Target屬性
4、事件
修飾符 event 類型 標識符
修飾符 event 類型 標識符{get{};set{};}
聲明和使用一個事件需要如下步驟:
1)建立一個代理或者使用系統代理程式:EventHandler
2)在類的內部利用event關鍵字聲明事件,並在類中定義呼叫事件的方法
3)聲明多個方法與事件關聯
C#學習筆記(八):結構和枚舉
結構
1、結構的聲明
[修飾符]struct 結構名稱[:介面名稱]{代碼};
在結構中不允許存在沒有參數的構造體
2、結構的使用
1)Point p1 = new Point(1,1);
2)Point p1;
3、結構和類的區別
1)結構不允許繼承
2)結構中不允許聲明一個沒有參數的構造體
3)在結構中不允許為一個執行個體化的域賦初值
4)利用結構類型來聲明對象的時候可以不使用new運算子
5)結構是一種數實值型別,而類是一種參考型別
枚舉
1、枚舉的聲明
[修飾符]enum 名稱[:各類整數類型]{列表};
例子:public enum test:ulong {Main=1,Max=2};
2、枚舉的使用
從枚舉類型的數值向整數類型數值轉換需要使用顯式類型轉換
3、System.Enum類
1)Format方法
2)FromString方法
3)GetName方法和GetNames方法
4)GetUnderlying方法
5)GetValus方法
6)IsDefined方法
7)ToObject方法