到目前为止,我一直在添加new()
这样的约束。
public T Request<T>(BaseRequest request)
where T : BaseResponse, new()
有没有办法将new()
烘焙到BaseResponse
,这样我只需要指定
where T : BaseResponse
答案 0 :(得分:1)
没有。派生类总是可以有一个私有/受保护的构造函数,并且没有办法阻止它。它甚至可能是一个抽象的类。
唯一的例外是struct
,它总是有一个默认构造函数 - 你使用default(SomeStruct)
得到的构造函数。不用说,这只是意味着用零初始化结构(尽管C#6使这有点复杂)。
答案 1 :(得分:1)
如果您的课程中有多种通用方法,那么您可以省去一些打字的唯一方法就是将类改为通用,即从中获取:
class YourClass
{
public static T Request<T>(BaseRequest request)
where T : BaseResponse, new()
{ }
public static T SomethingElse<T>(BaseRequest request)
where T : BaseResponse, new()
{ }
}
到此:
class YourClass<T> where T : BaseResponse, new()
{
public static T Request(BaseRequest request)
{ }
public static T SomethingElse(BaseRequest request)
{ }
}