我有一个带有两个构造函数的Response类。一个接收Result对象和另一个通用Result对象。
如何声明Response类的泛型构造函数以获取泛型对象?
在此示例代码中,使用了非泛型构造函数。
var result = new Result<SomeModel>();
var response = new Response(result); // should use the generic constructor but uses the normal
public interface IModel
{
}
public class SomeModel : IModel
{
public string Text { get; set; }
}
public class Result<T> : Result where T : class, IModel
{
public T Model { get; set; }
}
public class Result
{
public bool Success { get; set; }
}
public class Response
{
public Response(Result<IModel> data)
{
}
public Response(Result data)
{
}
}
答案 0 :(得分:3)
Result<IModel>
与Result<SomeModel>
不同。
您有两种选择:首先,您可以将Response
通用设为Response<T> where T : IModel
,然后将构造函数更改为Result<T>
。
或者,您可以定义IResult<out T>
接口(由Result<T>
实现,只使用模型属性的getter,并更改Response
的构造函数以获取IResult<IModel>
;这被称为“协方差”。