比方說,我有一個工廠ressembling這樣的:工廠,建設者和泛型在C#
public static class BusinessObjectFactory
{
public static T Create<T>(int objectId) where T : BusinessObject, new()
{
var dataSource = DataLayer.DataSources.Repository.Get<T>();
var serializer = DataLayer.Serializers.Repository.Get<T>();
var businessObject = new T {ObjectId = objectId, DataSource = dataSource, Serializer = serializer};
return businessObject;
}
}
這個工程提供我對的ObjectId,DataSource和串行公衆存取。
我寧願在我的T型構造函數中指定這些參數,知道 T被約束爲一個BusinessObject,而一個BusinessObject具有這種類型的 構造函數。
我知道我可以像這樣的東西取代我的呼叫轉接至新T:
var businessObject = (T) Activator.CreateInstance(typeof (T), objectId, dataSource, serializer);
但是,什麼是技術的原因,我的T構造函數必須是無參數的?我覺得有些東西我不懂泛型。我看到了幾個與這個話題相關的問題,但沒有真正啓發我的答案。
編譯器無法驗證(或強制)沒有人編寫派生自「BusinessObject」的類,但沒有一個構造函數接受三個參數「ObjectId,DataSource,Serializer」。那麼這個類可以用作上面的'T'。沒有通用約束的語法來約束具有正確的三參數構造函數的類型。 – 2012-07-18 08:36:30