基礎知識系列 泛型的型別引數小結

2021-09-07 09:19:08 字數 3097 閱讀 7223

以前總是看到泛型類中的泛型型別總感覺暈暈的,這次來個記錄部落格...

如果以後再懵的話,希望回頭看到自己這篇部落格能給自己乙個提醒...

泛型類↓

#region test

//////測試泛型

/// ///

泛型型別t

public

class testwhere t : class

public

test(t t)

//////

/// ///

///public

string

泛型型別t但不是泛型方法(t t)

//////

使用預設t型別的乙個方法;

///"中的型別引數同名

/// ///

//////

public

string 乙個引數t_t_t(t t)

public

string 乙個引數t1_t1_t1(t1 t1)

public

string 乙個引數t1_t_t(t t) //

where t1 : class

public

string 兩個引數t1_tt1_tt1(t t, t1 t1)

//////

/// ///

//////

//////

public

string 兩個引數tt1_tt1_tt1(t t, t1 t1)

public

string 兩個引數t1t2_t1t2_t1t2(t1 t1, t2 t2)

}#endregion

實現測試**↓

#region test

//測試所用到的型別sp

system.media.soundplayer sp = new

system.media.soundplayer();

string test_str = ""

; test

t_i = new test(test_str);

#region 泛型型別t但不是泛型方法(非泛型方法)

//此時為非泛型方法了;因為它引數只能是string(在new test(test_str);已經確定了引數型別)

test_str = t_i.泛型型別t但不是泛型方法(""

);

//接收的引數型別是在例項化的時候決定的...

testt_sound = new test();

test_str =t_sound.泛型型別t但不是泛型方法(sp);

#endregion

); test_str = t_i.乙個引數t_t_t("0"

); test_str =t_i.乙個引數t_t_t(sp);

#endregion

#region 乙個引數t1_t1_t1(目測功能和上面的那個[乙個引數t_t_t]一樣一樣的...)test_str = t_i.乙個引數t1_t1_t1("

string");

test_str = t_i.乙個引數t1_t1_t1("

string");

test_str = t_i.乙個引數t1_t1_t1(0

); test_str =t_i.乙個引數t1_t1_t1(sp);

#endregion

#region 乙個引數t1_t_t()test_str = t_i.乙個引數t1_t_t("

string");

test_str = t_i.乙個引數t1_t_t("0"

); test_str = t_i.乙個引數t1_t_t("0"

);

//test_str = t_i.乙個引數t1_t_t(0);

//報錯→引數1:無法從"int"轉換為"string"

#endregion

#region 兩個引數t1_tt1_tt1(這個第乙個引數已經在例項化的時候[new test(test_str)]就已經指定為string,即第乙個引數就是t的型別)test_str = t_i.兩個引數t1_tt1_tt1("

7", 5);//

這裡t型別為string,t1型別為int,

//可以簡化名稱:test_str = t_i.兩個引數t1_tt1_tt1("7", 5);

test_str = t_i.兩個引數t1_tt1_tt1("

7", "

5");//

這裡t型別為string,t1型別為string,怎麼判斷"5"是什麼型別?→型別推斷...

test_str = t_i.兩個引數t1_tt1_tt1("

7", sp);//

這裡t型別為string,t1型別為system.media.soundplayer,

//test_str = t_i.兩個引數t1_tt1_tt1(7, 5);

//報錯→引數1:無法從"int"轉換為"string"

#endregion

#region 兩個引數tt1_tt1_tt1(比上乙個[兩個引數t1_tt1_tt1]更靈活)test_str = t_i.兩個引數tt1_tt1_tt1(0, 0

); test_str = t_i.兩個引數tt1_tt1_tt1(0, 0

); test_str = t_i.兩個引數tt1_tt1_tt1("

string

", sp);

#endregion

#region 兩個引數t1t2_t1t2_t1t2(和上乙個[兩個引數tt1_tt1_tt1]目測一樣的...)test_str = t_i.兩個引數t1t2_t1t2_t1t2("", ""

); test_str = t_i.兩個引數t1t2_t1t2_t1t2(0, ""

);

#endregion

//將滑鼠放到f1位置,顯示:使用預設t型別的乙個方法;

#endregion

泛型的基礎知識整理

泛型就是將具體的型別引數化,將型別定義成引數形式,等到使用的時候再傳入具體的型別。泛型可以使用在類 介面和方法中。泛型的優勢 編譯時檢查 的型別安全,從而減少出錯的概率 消除了強制型別轉換,沒有泛型的返回值,我們可以認為是乙個object,在使用時需要對其進行強制轉換,這樣就可能會出現classca...

C 基礎知識(八)泛型

泛型的好處很多,包括復用性 可供多個型別使用而不用每個型別都定義一次 型別安全 不合法的型別報錯 高效率 減少裝箱和拆箱 舉例 假設我們有乙個父類animal,所有動物繼承這個類,現在需要做乙個比較動物重量的方法,如果不用泛型,則我們隊沒類動物都需要過載一次比較的方法 public class an...

C 基礎知識 泛型程式設計 模板

類模板首先思考乙個問題 如何實現乙個通用的交換函式呢?這裡很多人可能會想到函式過載,沒錯,函式過載可以實現不同型別資料的交換,但是也有很大的缺陷 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比較低,乙個出錯可能所有的過載均出錯 那能否給編譯器乙個模...