十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要為大家詳細介紹了C#的泛型,文中示例代碼介紹的非常詳細,零基礎(chǔ)也能參考此文章,感興趣的小伙伴們可以參考一下。

泛型是程序設(shè)計語言的一種特性。允許程序員在強類型程序設(shè)計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須作出指明。各種程序設(shè)計語言和其編譯器、運行環(huán)境對泛型的支持均不一樣。將類型參數(shù)化以達到代碼復(fù)用提高軟件開發(fā)工作效率的一種數(shù)據(jù)類型。泛型類是引用類型,是堆對象,主要是引入了類型參數(shù)這個概念。
為什么要使用泛型?通常我們在開發(fā)的時候會碰到這樣的情況:一個方法實現(xiàn)的功能都是一樣的(比如說保存一個對象),但是我們傳遞的參數(shù)類型不一樣而已,如果按照一般來講都會去拷貝一份方法把傳遞的參數(shù)類型改成想要的類型。
代碼如下:
//學(xué)生實體類
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; }
}
//教師實體類
public class Teacher
{
public string Name { get; set; }//教師姓名
public string Department { get; set; }//所屬科室
public string Title { get; set; }//職稱
//......省略
}
//學(xué)生操作接口
public interface StudentDao
{
public void Save(Student s);
}
//教師操作接口
public interface TeacherDao
{
public void Save(Teacher t);
}
//學(xué)生接口實現(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();
}
}
}
//教師接口實現(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方法大部分都是一樣的,除了傳進來的實體參數(shù)類型不一樣,對于實體的基本操作(增刪改查)都可以通過泛型接口實現(xiàn),不用每個實體操作接口的實現(xiàn)再寫一遍重復(fù)的代碼,這樣就大大提高了編程的效率,和代碼的復(fù)用率。對于上面的例子應(yīng)該如何去做呢?請看我下面的代碼:
//基本通用接口 public interface DaoSupport{ void save(T entity); } //泛型接口實現(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可以進行接口繼承DaoSupport和TeacherDaoImpl,StudentDaoImp繼承接口實現(xiàn)類DaoSupportImpl類就可以公用那些功能方法了。是不是很簡單,很好用?!
//老師接口類 public Interface TeacherDao:DaoSupport { ////這里可以進行教師類特有操作的定制實現(xiàn) } //老師接口實現(xiàn)類 public class TeacherDaoImpl :DaoSupportImpl ,TeacherDao { //這里可以進行教師類特有操作的定制實現(xiàn) } //學(xué)生接口 public interface StudentDao :DaoSupport { //這里可以進行學(xué)生類特有操作的定制 } //學(xué)生接口實現(xiàn) public class StudentDaoImpl :DaoSupportImpl ,StudentDao { //這里可以進行學(xué)生類特有操作的定制實現(xiàn) }
總結(jié):
1.泛型類似于一個類型占位符(自己這么理解),在接口里不進行詳細的聲明,只是給類型占一個位置
2.在具體到某一個操作對象時把參數(shù)T換成你要操作對象的類型,那么這個操作類就是正對于該類的操作類實例。極大的提高了編程效率和代碼復(fù)用。
3.DaoSupport里面所放置的方法是任何一個類型實體對象都有的操作,比如基本的增刪改查,就是那些可以被公用的方法代碼抽取成公共的基接口類。
4.如果在DaoSupport中實現(xiàn)的方法中不能滿足業(yè)務(wù)需要,那么在具體實體操作類中可以定制自己特有的方法。比如:教師類中要進行多條件查詢等。
以上就是C#泛型的詳細內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊!
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。