第一章:根據具體的需求得出結果:
需求為:通過編寫單獨的方法在控制台同時輸出 int ivalue=123,long lvalue=123123 的型別。
第一種方法:單獨呼叫方法並輸出 (明確型別前提下)
classprogram
}public
class
methodshow
型別為", iparameter,iparameter.gettype());
}//////
long引數
/// ///
public
static
void showlong(long
lparameter)
型別為", lparameter, lparameter.gettype());
}}
從上可以看出為了實現int 型別 和long 型別 各自單獨寫了各自的方法,這樣容易造成**冗餘,**質量低下。希望能將兩者的方法進行乙個合併,故考慮使用某種型別能夠同時容納這兩種型別,
因此想到object型別和泛型方法
第二種方法,通過object型別的引數
**為:
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
study
}public
class
methodshow
型別為", oparameter, oparameter.gettype());}}
}
第三種方法,泛型方法 ,用乙個通用的資料型別t來作為乙個佔位符,等待在例項化時用乙個實際的型別來代替
classprogram
}public
class
methodshow
型別為", tparameter, tparameter.gettype());
}}
通過以上的方法可以看出使用object型別的引數和使用泛型引數後可以減少**的書寫,但也有區別。
1.使用object型別的原理:
(1)object型別是任何型別的父類
(2)任何父類出現的地方,都可以用子類代替(黎克特制轉換原則)
缺點:(1)使用object型別引數的方法需要經過裝箱和拆箱的過程,影響了效能
(2)使用object型別引數的方法,無法知道在執行的時候的準確型別(因為object型別是任何型別的父類)可能傳入錯誤的引數導致出錯
2.泛型方法(有型別 引數)在呼叫的時候才指明引數型別
使用格式:
首先,宣告泛型方法: t是型別引數 在使用時才指定具體型別
訪問修飾符 返回值型別 方法名稱(t 形參)
方法體然後,呼叫泛型方法
方法名稱《具體的引數型別》(對應的實參t);//對應的實參t:有具體的引數型別
注意:具體的引數型別與對應的實參t必須要是相同的型別
相對於object型別引數方法使用泛型的優點有:
(1)效能優於object型別,與普通方法一樣(使用效率高)
(2)傳參時所傳遞的引數型別(t)必須與引數型別(t被指定的型別)一致,否則立即報錯,也就是能夠立即知道所傳的引數是否準確。
第二章:泛型約束
泛型可以進行型別的約束,但object不可以進行型別的約束(因為object型別是所有型別的父類)
classprogram
;//物件初始化器
methodshow.sayhishow(chinese); //呼叫泛型方法
console.read();}}
public
class
methodshow
,,", t.id, t.name, t.age);}//
public
static
void sayhiobject(object o) //
無法約束
// }
public
class
people
public
string name
public
int age
public
void
sayhi()
說,早上好
", this
.name);}}
public
class
chinese:people
//////
長城
/// public
string wall
}
注意:使用泛型時引數必須是約束的引數型別和可以(型別引數t和引數型別t)匹配的引數。
泛型 泛型類 泛型方法 泛型擦除
1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...
C 學習日記30 泛型類 泛型方法 泛型委託
泛型允許您延遲編寫類或方法中的程式設計元素的資料型別的規範,直到實際在程式中使用它的時候。換句話說,在宣告類或方法的時候由於不知道使用者要傳入什麼樣型別的引數,所以在傳入型別的地方 挖乙個坑 使用它的時候我們再用具體資料型別填上。根據前面所學知識我們定義乙個類 class data 此時n data...
泛型 (2)泛型類 泛型方法 泛型介面
一 泛型類 定義person類 package cn.itcast.p2.bean public class person implements comparable public person string name,int age public int compareto person p ov...