使用普通和通用参数重载构造函数

时间:2018-04-13 17:19:17

标签: c# generics constructor

我有一个带有两个构造函数的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)
    {
    }
}

1 个答案:

答案 0 :(得分:3)

Result<IModel>Result<SomeModel>不同。

您有两种选择:首先,您可以将Response通用设为Response<T> where T : IModel,然后将构造函数更改为Result<T>

或者,您可以定义IResult<out T>接口(由Result<T>实现,只使用模型属性的getter,并更改Response的构造函数以获取IResult<IModel> ;这被称为“协方差”。