通用约束

时间:2017-04-07 16:52:11

标签: c# generics

我有一个类,我想在创建时强制执行一些通用约束

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作为参数时重新指定?

1 个答案:

答案 0 :(得分: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
    }
}

<强>更新
如果Put在另一个类中是你最好的解决方案,它可以重构你的代码并在同一个类中移动所有与T相关的方法(并在类中添加约束)

更新2
如果无法更新1,则可能值得检查是否可以用ObjectBase或其他基类替换T