我有一个类,我想在创建时强制执行一些通用约束
Myobject.cs
public class MyObject<T> where T : ObjectBase, new()
{
public MyObject()
{
}
public bool Validate(out ServiceError? message)
{
// validation
}
}
Run Code Online (Sandbox Code Playgroud)
ObjectBase.cs
public abstract class ObjectBase
{
public abstract bool Validate(out ServiceError? message);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以避免每次有这样的函数时都必须为T设置通用约束:
ObjectRepo.cs
public void Put<T>(MyObject<T> obj)
where T : ObjectBase, new()
{
// code
}
Run Code Online (Sandbox Code Playgroud)
如果在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
}
}
Run Code Online (Sandbox Code Playgroud)
更新
如果Put在另一个类中是您最好的解决方案,它可以重构您的代码并在同一个类中移动所有T相关的方法(并在类上添加约束)
更新2
如果无法更新1,则可能值得检查是否可以用ObjectBase或其他基类替换T.