任何人都可以在下面的類聲明中幫助我使用where TEntity : class, IEntity, new()
行。「where」關鍵字在c sharp中的類聲明中
public abstract class BaseEntityManager<TEntity>
where TEntity : class, IEntity, new()
任何人都可以在下面的類聲明中幫助我使用where TEntity : class, IEntity, new()
行。「where」關鍵字在c sharp中的類聲明中
public abstract class BaseEntityManager<TEntity>
where TEntity : class, IEntity, new()
where TEntity : ...
對通用參數TEntity應用約束。在這種情況下,約束條件是:
類:以TEntity的參數必須是引用類型
IEntity:參數必須是或實現IEntity接口
新():該參數必須具有公共參數構造
如果你可以添加一些代碼來顯示某人如何使用BaseEntityManager作爲基類,那將是非常棒的:) – niico 2017-01-23 22:11:18
哪裏是一個通用型的約束。該行讀取類型TEntity必須是引用類型而不是值類型,必須實現接口IEntity並且它必須具有不帶參數的構造函數。
的where
關鍵字後面的類聲明限制什麼類型的通用TEntity
可能。在這種情況下TEntity
必須是一個類(這意味着它不能是值類型像int
或DateTime
),它必須實現接口IEntity
。 new()
約束表示此類中的方法有能力調用TEntity
(例如new TEntity()
)
表示的通用類的默認構造函數問題是什麼?
讓我看看我認爲的問題是什麼。該約束確保您只能使用泛型參數來繼承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> {}
「任何人都可以幫助我......」這就是問題所在。很明顯他在問什麼。 – 2016-09-16 08:42:00
而你的問題是什麼? – 2009-10-21 02:55:57
我想他是要求解釋語法。 – Matt 2014-09-30 17:43:29