繁体   English   中英

通用约束

[英]Generic contraints

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

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

如果您在类中拥有T,请不要在其方法上重新定义T

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM