2017-04-07 66 views
2

我有一个类,我想执行时创建通用约束上

Myobject.cs

public class MyObject<T> where T : ObjectBase, new() 
    { 
     public MyObject() 
     { 
     } 

     public bool Validate(out ServiceError? message) 
     { 
      // validation 
     } 
    } 

ObjectBase.cs

public abstract class ObjectBase 
{ 
    public abstract bool Validate(out ServiceError? message); 
} 

我想知道一些通用的约束如果有什么办法可以避免每次有这样的功能时都要为T设置通用约束:

个ObjectRepo.cs

public void Put<T>(MyObject<T> obj) 
    where T : ObjectBase, new() 
{ 
    // code 
} 

如果为MyObject类指定T的约束,有一个原因,我不得不重新指定每一次我将myObject作为参数?

回答

6

不要在你的方法重新定义牛逼如果您有它的类

public class MyObject<T> where T : ObjectBase, new() 
{ 
    //public void Put<T>(MyObject<T> obj)//doesn't work 
    public void Put(MyObject<T> obj)//works 
    { 
     // code 
    } 
} 

更新
如果把在另一个类的最佳解决方案是重构你的代码,并把所有的T在同级别的相关方法(并添加类上的约束)

更新2
如果更新1是不可能的,它可能值得如果你能REPL检查使用ObjectBase或其他基类来获得你的T

+0

“无法找到类型或命名空间'T'(缺少使用指令或程序集引用吗?” – jlee

+0

你在不同的类? –

+0

刚刚看到您的编辑,Put函数是在不同的类中,而不在MyObject类中 – jlee