我有一个类,我想在创建时强制执行一些通用约束
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作为参数时重新指定?
答案 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