比方说,我有一个工厂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