程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 不忘本~抽象類

不忘本~抽象類

編輯:C#入門知識

返回目錄

說在前

這個抽象類在我之前的文章中也有介紹過,而在“不忘本”系列中的抽象類,將會主要介紹它的概念及與接口的區別。

概念:

抽象類不同的普通類,它有自己的標示符abstract,在抽象類裡將可以出現抽象方法,它本身只能充當父類的角色,所以,它在真實的生產過程中,都是通過子類去實現的,即抽象類不能被實例化。前面說的父類有時我們經常叫它基類,比如你的WEB層的controller可能需要一個基類,用來存儲公用的屬性和方法,這時,抽象類是最好的選擇,在frameworks裡有很多這樣的例子,如System.Web.Mvc.Controller這就是一個抽象類,它由一組與控制器相關的方法及屬性組件。

在項目中的抽象類:

在我們實現項目中,我提倡每個層中都要有自己的基類,用來存儲公用的東西,如controller裡的BaseController,BLL層的BaseBll,data層裡的RepositoryBase等等,它們都是其它功能類的父類。

與接口的區別:

從概念上來說:

接口用來約束一組行為,實現接口的對象之前沒有本質聯系,它是一種行為規范,或者是一種標示,通過接口我們可以實現多態!

抽象類一些相關聯的對象的一種抽象,將相關聯的對象的公用信息進行抽象,放到一個類裡,而這個類往往叫它抽象類,用abstract進行標示。

從代碼的角度來說:

接口是一組行為規范,看一個簡單倉儲接口

     
     
     
      IRepository<TEntity>
            TEntity :  
         
         
         
         
         
         
         
         
         
         
         
        IQueryable<TEntity> 
         
         
         
        TEntity Find( 

它會叫每個具體的倉儲接口去實現它,如IUserRepository是用戶持久化的接口,同時它也可能被持久化基類去實現,如DbContextRepository,它是使用ef來完成持久化的基類,當然你可以使用MemoryContextRepository去實現IRepository這個接口,當然它的功能就是使用內存表來實現持久化的。

抽象類的代碼展示:

   
     
     
      DemoContextRepository<TEntity><TEntity>
         TEntity :  IExtensionRepository<TEntity>成員
          Insert(IEnumerable<TEntity>   Update(IEnumerable<TEntity>   Delete(IEnumerable<TEntity>   Update<T>(System.Linq.Expressions.Expression<Action<T>> entity)  T :   IQueryable<TEntity> GetModel(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity>  IQueryable<TEntity> GetModel(System.Linq.Expressions.Expression<Func<TEntity, >>  TEntity Find(System.Linq.Expressions.Expression<Func<TEntity, >>  TEntity Find(EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity>   BulkInsert(IEnumerable<TEntity> item,    BulkInsert(IEnumerable<TEntity>   BulkUpdate(IEnumerable<TEntity> item,     BulkDelete(IEnumerable<TEntity>   Action<EntityFrameworks.Entity.Core.SavedEventArgs>  Action<EntityFrameworks.Entity.Core.SavedEventArgs>

         IOrderableRepository成員
         IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>>  IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, EntityFrameworks.Entity.Core.Specification.ISpecification<TEntity>  IQueryable<TEntity> GetModel(Action<EntityFrameworks.Entity.Core.Orderable<TEntity>> orderBy, System.Linq.Expressions.Expression<Func<TEntity, >> 

         IRepository<TEntity>成員
               IQueryable<TEntity>  TEntity Find(  

上面的抽象類只是一個DEMO,所以實現持久化的邏輯我並沒有實現,當然這並不是它的重點,重點在於你的具體倉儲如果繼承了它,將會以DemoContextRepository這種方式去持久化對象。

返回目錄

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved