91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是C#的泛型?怎么用?

發布時間:2020-05-15 13:38:59 來源:億速云 閱讀:73 作者:Leah 欄目:編程語言

這篇文章主要為大家詳細介紹了C#的泛型,文中示例代碼介紹的非常詳細,零基礎也能參考此文章,感興趣的小伙伴們可以參考一下。

泛型是程序設計語言的一種特性。允許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須作出指明。各種程序設計語言和其編譯器、運行環境對泛型的支持均不一樣。將類型參數化以達到代碼復用提高軟件開發工作效率的一種數據類型。泛型類是引用類型,是堆對象,主要是引入了類型參數這個概念。

為什么要使用泛型?通常我們在開發的時候會碰到這樣的情況:一個方法實現的功能都是一樣的(比如說保存一個對象),但是我們傳遞的參數類型不一樣而已,如果按照一般來講都會去拷貝一份方法把傳遞的參數類型改成想要的類型。

代碼如下:

//學生實體類
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; }//職稱
        //......省略
    }

    
//學生操作接口
public interface StudentDao
    {
        public void Save(Student s);
    }
//教師操作接口
public interface TeacherDao
    {
        public void Save(Teacher t);
    }
    
//學生接口實現
 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();
            }
        }
    }
//教師接口實現
 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方法大部分都是一樣的,除了傳進來的實體參數類型不一樣,對于實體的基本操作(增刪改查)都可以通過泛型接口實現,不用每個實體操作接口的實現再寫一遍重復的代碼,這樣就大大提高了編程的效率,和代碼的復用率。對于上面的例子應該如何去做呢?請看我下面的代碼:

//基本通用接口
public interface DaoSupport<T> 
    {

	    void save(T entity);
    }

//泛型接口實現
public class BaseDaoImpl<B>:BaseDao<B>
{
    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繼承接口實現類DaoSupportImpl類就可以公用那些功能方法了。是不是很簡單,很好用?!

//老師接口類
public Interface TeacherDao<Teacher>:DaoSupport<Teacher>
{
    ////這里可以進行教師類特有操作的定制實現
}
//老師接口實現類
public class TeacherDaoImpl<Teacher>:DaoSupportImpl<Teacher>,TeacherDao<Teacher>
{
    //這里可以進行教師類特有操作的定制實現
}


//學生接口
public interface StudentDao<Student>:DaoSupport<Student>
{
    //這里可以進行學生類特有操作的定制
}
//學生接口實現
public class StudentDaoImpl<Student>:DaoSupportImpl<Student>,StudentDao<Student>
{
    //這里可以進行學生類特有操作的定制實現
}


總結:

    1.泛型類似于一個類型占位符(自己這么理解),在接口里不進行詳細的聲明,只是給類型占一個位置

    2.在具體到某一個操作對象時把參數T換成你要操作對象的類型,那么這個操作類就是正對于該類的操作類實例。極大的提高了編程效率和代碼復用。

    3.DaoSupport里面所放置的方法是任何一個類型實體對象都有的操作,比如基本的增刪改查,就是那些可以被公用的方法代碼抽取成公共的基接口類。

    4.如果在DaoSupport中實現的方法中不能滿足業務需要,那么在具體實體操作類中可以定制自己特有的方法。比如:教師類中要進行多條件查詢等。

以上就是C#泛型的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!

向AI問一下細節
推薦閱讀:
  1. C# 泛型
  2. C#泛型怎么用

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦东新区| 巴里| 乌恰县| 漳州市| 衡南县| 尼勒克县| 泾川县| 望奎县| 武宣县| 乌鲁木齐市| 桂东县| 潍坊市| 吴堡县| 辛集市| 界首市| 甘谷县| 绥芬河市| 红安县| 苍山县| 万全县| 乐东| 长白| 定结县| 雷山县| 绥宁县| 房产| 京山县| 会宁县| 诸暨市| 永平县| 东乡县| 桃源县| 巨野县| 福州市| 奉化市| 太谷县| 阿克| 罗城| 西充县| 平武县| 达日县|