C 泛型 泛型類擴充套件

2021-07-13 12:19:49 字數 2332 閱讀 1617

泛型:更準確的使用一種以上的型別**方式 泛型允許我們宣告型別引數化的**,我們可以用不同的型別進行例項化

也就是說,我們可以用「型別佔位符」(型別引數)來宣告,然後在建立例項時提供真實型別

**泛型不是型別,而是型別的模板**

c#提供了5種泛型:類、結構、介面、委託和方法。前面四個是型別,方法是成員。

一、 泛型類:建立和使用常規的、非泛型的類的過程中有兩個步驟:宣告類並建立類的例項

泛型類不是實際的類,而是類的模板。必須先構建實際的類型別,然後建立這個構建後的類型別的例項

宣告泛型類,構建真實的類型別,建立構建後的類型別的例項。

型別實參:替代型別引數的真實型別叫做型別實參

class program

;var stringarray = new

string ;

******class.reverseandprint(intarray); //呼叫泛型方法

******class.reverseandprint(intarray); // 可以根據變數推斷型別引數 簡化寫法

******class.reverseandprint(stringarray);

// 泛型類擴充套件

var int****** = new ******(3, 5, 7);

var string****** = new ******("a1", "a2", "a3");

int******.print(); // 呼叫執行 擴充套件類中的方法

string******.print();

console.readkey();}}

class mystack// 泛型類

}bool isstackempty

}public

void

push(t x) // 乙個方法 傳遞 乙個引數型別的形參

}public t pop() // 出棧

public

mystack()

public

void

print() // 遍歷列印陣列內容

", stackarray[i]);}}

}

二、 型別引數約束:提供額外資訊讓編譯器知道引數可以接受那些型別的引數 ,這些額外的資訊叫做約束

約束使用where 子句列出

每乙個約束的型別引數有自己的where子句

如果形參有多個約束,它們在where子句中使用逗號分隔

where子句:在型別引數列表的關閉尖括號之後列出

在結尾不使用逗號或其他分隔符

可以以任何次序列出

where是上下文關鍵字,可以在其他上下文中使用

5中型別的約束和次序

類名:只有這個型別的類或從它繼承的類才能用作型別實參

class : 任何引用型別,包括類、陣列、委託和介面度可以用作實參

struct: 任何值型別都可以被用作型別實參

inte***cename:只有這個介面或實現這個介面的型別才能用作實參

new() :任何帶有無參公共建構函式的型別都可以用作實參,這叫做建構函式約束

where中的約束必須有特定的順序:最多只能有乙個主約束,如果 有則必須放在第一位

可以有任意多的inte***cename約束,如果存在建構函式約束,則必須放在最後

//class linkedlist// 兩個型別引數

// where first:約束型別; 約束型別順序:類名--class--struct--inte***cename--new()

//

三、 泛型方法:泛型方法可以在泛型和非泛型類以及結構和介面中宣告

宣告泛型方法:在方法名引數列表後放可選的約束

在方法名稱之後和方法引數列表之前放型別引數列表

class

******class

}}

四、 擴充套件方法和泛型類

這裡簡單描述下非泛型類的擴充套件:

1、宣告擴充套件方法的類必須宣告為static

2、擴充套件方法本身必須宣告為是static

3、擴充套件方法必須包含關鍵字this作為它的第乙個引數型別,並且在後面跟著它所擴充套件的類的名稱

泛型方法的擴充套件和方法擴充套件一樣

class

******

public t ergodic() // 遍歷列印

}static

class extend****** // 泛型類的擴充套件 靜態宣告類

}}

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...

泛型 (2)泛型類 泛型方法 泛型介面

一 泛型類 定義person類 package cn.itcast.p2.bean public class person implements comparable public person string name,int age public int compareto person p ov...

泛型 泛型簡介和泛型類

在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...