這篇文章主要為大家詳細(xì)介紹了C#的泛型,文中示例代碼介紹的非常詳細(xì),零基礎(chǔ)也能參考此文章,感興趣的小伙伴們可以參考一下。
創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),托克托網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:托克托等地區(qū)。托克托做網(wǎng)站價(jià)格咨詢(xún):028-86922220
泛型是程序設(shè)計(jì)語(yǔ)言的一種特性。允許程序員在強(qiáng)類(lèi)型程序設(shè)計(jì)語(yǔ)言中編寫(xiě)代碼時(shí)定義一些可變部分,那些部分在使用前必須作出指明。各種程序設(shè)計(jì)語(yǔ)言和其編譯器、運(yùn)行環(huán)境對(duì)泛型的支持均不一樣。將類(lèi)型參數(shù)化以達(dá)到代碼復(fù)用提高軟件開(kāi)發(fā)工作效率的一種數(shù)據(jù)類(lèi)型。泛型類(lèi)是引用類(lèi)型,是堆對(duì)象,主要是引入了類(lèi)型參數(shù)這個(gè)概念。
為什么要使用泛型?通常我們?cè)陂_(kāi)發(fā)的時(shí)候會(huì)碰到這樣的情況:一個(gè)方法實(shí)現(xiàn)的功能都是一樣的(比如說(shuō)保存一個(gè)對(duì)象),但是我們傳遞的參數(shù)類(lèi)型不一樣而已,如果按照一般來(lái)講都會(huì)去拷貝一份方法把傳遞的參數(shù)類(lèi)型改成想要的類(lèi)型。
代碼如下:
//學(xué)生實(shí)體類(lèi) public class Student { public string Stuno { get; set; } public string Name { get; set; } public string Sex { get; set; } public string Phone { get; set; } public string Addr { get; set; } } //教師實(shí)體類(lèi) public class Teacher { public string Name { get; set; }//教師姓名 public string Department { get; set; }//所屬科室 public string Title { get; set; }//職稱(chēng) //......省略 } //學(xué)生操作接口 public interface StudentDao { public void Save(Student s); } //教師操作接口 public interface TeacherDao { public void Save(Teacher t); } //學(xué)生接口實(shí)現(xiàn) class StudentDaoImpl:StudentDao { public void Save(Student s) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(s); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } } //教師接口實(shí)現(xiàn) class TeacherDaoImpl:TeacherDao { public void Save(Teacher t) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(t); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } }
上面的Save方法大部分都是一樣的,除了傳進(jìn)來(lái)的實(shí)體參數(shù)類(lèi)型不一樣,對(duì)于實(shí)體的基本操作(增刪改查)都可以通過(guò)泛型接口實(shí)現(xiàn),不用每個(gè)實(shí)體操作接口的實(shí)現(xiàn)再寫(xiě)一遍重復(fù)的代碼,這樣就大大提高了編程的效率,和代碼的復(fù)用率。對(duì)于上面的例子應(yīng)該如何去做呢?請(qǐng)看我下面的代碼:
//基本通用接口 public interface DaoSupport{ void save(T entity); } //泛型接口實(shí)現(xiàn) public class BaseDaoImpl:BaseDao { public void Save(B b) { ISession session = factory.OpenSession(); ITransaction tx; try { tx = session.BeginTransaction(); session.save(t); tx.Commit(); } catch (Exception e) { if (tx != null) tx.Rollback(); throw; } finally { session.Close(); } } }
這樣的話就TeacherDao,StudentDao可以進(jìn)行接口繼承DaoSupport和TeacherDaoImpl,StudentDaoImp繼承接口實(shí)現(xiàn)類(lèi)DaoSupportImpl類(lèi)就可以公用那些功能方法了。是不是很簡(jiǎn)單,很好用?!
//老師接口類(lèi) public Interface TeacherDao:DaoSupport { ////這里可以進(jìn)行教師類(lèi)特有操作的定制實(shí)現(xiàn) } //老師接口實(shí)現(xiàn)類(lèi) public class TeacherDaoImpl :DaoSupportImpl ,TeacherDao { //這里可以進(jìn)行教師類(lèi)特有操作的定制實(shí)現(xiàn) } //學(xué)生接口 public interface StudentDao :DaoSupport { //這里可以進(jìn)行學(xué)生類(lèi)特有操作的定制 } //學(xué)生接口實(shí)現(xiàn) public class StudentDaoImpl :DaoSupportImpl ,StudentDao { //這里可以進(jìn)行學(xué)生類(lèi)特有操作的定制實(shí)現(xiàn) }
總結(jié):
1.泛型類(lèi)似于一個(gè)類(lèi)型占位符(自己這么理解),在接口里不進(jìn)行詳細(xì)的聲明,只是給類(lèi)型占一個(gè)位置
2.在具體到某一個(gè)操作對(duì)象時(shí)把參數(shù)T換成你要操作對(duì)象的類(lèi)型,那么這個(gè)操作類(lèi)就是正對(duì)于該類(lèi)的操作類(lèi)實(shí)例。極大的提高了編程效率和代碼復(fù)用。
3.DaoSupport里面所放置的方法是任何一個(gè)類(lèi)型實(shí)體對(duì)象都有的操作,比如基本的增刪改查,就是那些可以被公用的方法代碼抽取成公共的基接口類(lèi)。
4.如果在DaoSupport中實(shí)現(xiàn)的方法中不能滿(mǎn)足業(yè)務(wù)需要,那么在具體實(shí)體操作類(lèi)中可以定制自己特有的方法。比如:教師類(lèi)中要進(jìn)行多條件查詢(xún)等。
以上就是C#泛型的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!