泛型學習由淺入深

2022-05-02 01:18:08 字數 2637 閱讀 5584

第一章:根據具體的需求得出結果:

需求為:通過編寫單獨的方法在控制台同時輸出    int ivalue=123,long lvalue=123123 的型別。

第一種方法:單獨呼叫方法並輸出 (明確型別前提下)

class

program

}public

class

methodshow

型別為", iparameter,iparameter.gettype());

}//////

long引數

/// ///

public

static

void showlong(long

lparameter)

型別為", lparameter, lparameter.gettype());

}}

從上可以看出為了實現int 型別  和long 型別 各自單獨寫了各自的方法,這樣容易造成**冗餘,**質量低下。希望能將兩者的方法進行乙個合併,故考慮使用某種型別能夠同時容納這兩種型別,

因此想到object型別和泛型方法

第二種方法,通過object型別的引數   

**為:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

study

}public

class

methodshow

型別為", oparameter, oparameter.gettype());}}

}

第三種方法,泛型方法         ,用乙個通用的資料型別t來作為乙個佔位符,等待在例項化時用乙個實際的型別來代替

class

program

}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型別是所有型別的父類)

class

program

;//物件初始化器

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...