好吧我正在寻找一些输入,我很确定这是目前不支持在.NET 3.5中,但在这里。如何解决C#中泛型类型约束的局限性?
我想需要一个泛型类型传递到我的同班同学有这样的构造:
new(IDictionary<string,object>)
因此该类看起来像这样
public MyClass<T> where T : new(IDictionary<string,object>)
{
T CreateObject(IDictionary<string,object> values)
{
return new T(values);
}
}
但是编译器不支持这,它并不真正知道我在问什么。
你们有些人可能会问,你为什么要这么做?那么我正在开发一个ORM的宠物项目,所以我从数据库中获取值,然后创建对象并加载值。
我认为这将是更清洁,让对象只是用我给它的价值创造自己。据我可以告诉我有两个选项:
1)使用反射(我试图避免)获取PropertyInfo []数组,然后用它来加载值。
2)要求吨至支持像这样的接口:
公共接口ILoadValues { 空隙LoadValues(IDictionary的值); }
,然后做这个
public MyClass<T> where T:new(),ILoadValues
{
T CreateObject(IDictionary<string,object> values)
{
T obj = new T();
obj.LoadValues(values);
return obj;
}
}
我有我的猜测是哲学接口的问题,我真的不希望暴露人装载值的公共方法。使用构造的想法是,如果我有一个对象像这样
namespace DataSource.Data
{
public class User
{
protected internal User(IDictionary<string,object> values)
{
//Initialize
}
}
}
只要MyClass<T>
是在同一程序的构造函数可用。我个人认为在我看来,类型约束应该问(我可以访问这个构造函数吗?我的确很棒!)
反正任何输入是受欢迎的。
我设置你为答案,因为我从来不知道你可以通过显式声明它来隐藏一个接口实现。或者至少它没有点击直到你写下它。谢谢! – Jose 2010-03-22 15:37:45