2009-10-21 71 views
17

任何人都可以在下面的類聲明中幫助我使用where TEntity : class, IEntity, new()行。「where」關鍵字在c sharp中的類聲明中

public abstract class BaseEntityManager<TEntity> 
     where TEntity : class, IEntity, new() 
+2

而你的問題是什麼? – 2009-10-21 02:55:57

+4

我想他是要求解釋語法。 – Matt 2014-09-30 17:43:29

回答

28

where TEntity : ...對通用參數TEntity應用約束。在這種情況下,約束條件是:

類:以TEntity的參數必須是引用類型
IEntity:參數必須是或實現IEntity接口
新():該參數必須具有公共參數構造

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+0

如果你可以添加一些代碼來顯示某人如何使用BaseEntityManager作爲基類,那將是非常棒的:) – niico 2017-01-23 22:11:18

4

where關鍵字後面的類聲明限制什麼類型的通用TEntity可能。在這種情況下TEntity必須是一個類(這意味着它不能是值類型像intDateTime),它必須實現接口IEntitynew()約束表示此類中的方法有能力調用TEntity(例如new TEntity()

-1

表示的通用類的默認構造函數問題是什麼?

讓我看看我認爲的問題是什麼。該約束確保您只能使用泛型參數來繼承BaseEntityManager,泛型參數是實現IEntity幷包含無參數構造函數的引用類型。

E.X.

public class Product : IEntity { 
    public Product() {} 
} 

public class Wrong { 
    public Wrong() {} 
} 

public class WrongAgain : IEntity { 
    private Wrong() {} 
} 


// compiles 
public ProductManager : BaseEntityManager<Product> {} 


// Error - not implementing IEntity 
public WrongManager : BaseEntityManager<Wrong> {} 


/Error - no public parameterless constructor 
public WrongAgainManager : BaseEntityManager<WrongAgain> {} 

看到link text

+0

「任何人都可以幫助我......」這就是問題所在。很明顯他在問什麼。 – 2016-09-16 08:42:00