C 學習筆記1

2022-03-24 06:50:16 字數 3374 閱讀 2278

近幾天對c#教程裡一些沒有完全掌握的知識進行了學習,學習到了自己以前不知道的用法,並進行了練習。

知識點包括列舉、異常處理、泛型和匿名委託。

1. 列舉

以前知道列舉型別,但是很少用到。

列舉是一組命名整型變數。宣告關鍵字時enum

列舉可以建立物件與整數間的對應關係;使**簡潔;可以限定值的範圍,減少編譯錯誤;易於修改;更安全

**簡潔:

class

animal

enum animal ;

限定值的範圍:

如果不知道動物有哪些下面**編譯是不會有錯誤的,而實際執行會出現錯誤

showanimal(4);

而下面這樣錯誤就可以在寫**時發現

showanimal((int)animal.bird);

易於修改:如果現在要刪除兔子,如果不適用列舉,**中呼叫兔子id的**不會出現編譯錯誤,而使用列舉,就可以在編譯時發現該錯誤

更安全:使用列舉,物件和整數的對應關係就確定了,不可修改,而使用類是可能被修改的

2. 異常處理

異常是在程式執行期間出現的問題。c# 中的異常是對程式執行時出現的特殊情況的一種響應

public

class

}

異常可以丟擲

catch(exception e)

合理的處理異常是很重要的,異常往往是程式中要修復的地方,需要注意。

3.泛型

泛型是一種延遲編寫資料型別的規範,在實際使用的時候再確定型別。

泛型的優點在於重用**、保護型別的安全性以及提高效能。

泛型類例子:

public

class mygenericarray

public t getitem(int

index)

public

void setitem(int

index, t value)

}

這裡使用t作為通用型別,指代資料型別,宣告了t型別的自定義陣列的建構函式(申請空間)、元素獲取方法和元素賦值方法。

使用用例:

static

void main(string

args)

//獲取值

for (int c = 0; c < 5; c++)

console.writeline();

//宣告乙個字元陣列

mygenericarray chararray = new mygenericarray(5

);

//設定值

for (int c = 0; c < 5; c++)

//獲取值

for (int c = 0; c < 5; c++)

console.writeline();

console.readkey();

}

這裡分明int、char作為資料型別例項化自定義陣列,首先申請空間、然後分別呼叫設定值和取值的方法。

泛型方法

除了泛型類,還可以通過型別引數宣告泛型方法,如下例:

static

void swap(ref t a, ref

t b)

這是乙個使用t來替代資料型別的泛型方法,實現兩個變數值交換

呼叫例子如下:

static

void main(string

args)

, b =

", a, b);

console.writeline(

"c = , d =

", c, d);

swap

(ref a, ref

b); swap

(ref c, ref

d); console.writeline(

"a = , b =

", a, b);

console.writeline(

"c = , d =

", c, d);

console.readline();

}

泛型委託

委託也可以泛型,例如

delegate t numberchanger(t n);

宣告兩個方法,乙個輸出顯示int型別,乙個輸出顯示string型別:

public

static

void intshow(int

v)

public

static

void stringshow(string

v)

建立委託例項,並呼叫

//

建立委託例項

numberchanger nc1 = new numberchanger(intshow);

numberchanger

nc2 = new numberchanger(stringshow);

nc1(

25);

nc2(

"hello

");

4. 匿名方法

匿名方法提供了一種傳遞**塊作為委託碳數的技術,匿名方法是沒有名稱只有主體的方法。

匿名方法的意義在於減少寫方法的工作量,可以訪問呼叫者的變數,降低程式複雜度,減少系統開銷。

匿名方法語法

delegate

void numberchanger(int

n);...

numberchanger nc = delegate(intx)"

, x);

};

這裡宣告了乙個委託,並用一塊**進行了例項化。

例項如下:

delegate

void hello(string str); //

宣告乙個委託

//使用匿名方法建立委託例項

hello h = delegate(string

str)

{ console.writeline(str);;//

使用匿名方法呼叫委託

h("hello

");

C 學習筆記(1)

1.類和結構體的區別 區別在於訪問控制方面,對於結構體而言,所有成員預設都是public,即在外部可以訪問,對於類來說,預設條件下成員函式都是private,不能被外部訪問。2.c 中的建構函式 建構函式最重要的作用是建立物件本身。c 規定,每個類必須有乙個建構函式,沒有它,就不能建立任何物件。乙個...

C 學習筆記1

一,類的最基本的函式 乙個類至少有預設建構函式,拷貝建構函式,拷貝構造運算子,和析構函式四個最基本的函式,在下面的例子中將對這些函式進行講解。如下 includeusing namespace std class superone superone superone void superone se...

C 學習筆記1

c 中結構體 和 類可以通用,結構體中也可以定義函式.區別 在於訪問控制。結構體中 預設成員 都是public 類中 預設 私有的 建構函式 1。建構函式最重要的作用是建立物件本身 2.c 規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件 3.如果沒有提供建構函式,則c 提供乙個預設...