Ark*_*nam 8 .net c# generics interface
用我认为是一段非常简单的代码来踩我自己的脚趾.代码说的比文字更好,所以在这里.
public interface IResponse
{
IResult Result { get; set; }
}
public class Response<T> : IResponse
where T : IResult
{
public T Result { get; set; }
// COMPILER ERROR: Property 'Result' cannot be implemented property from interface 'IResponse'. Type should be 'IResult'.
}
Run Code Online (Sandbox Code Playgroud)
编译器不允许我这样做,因为IResponse要求Result为IResult,但是我想利用实现类中的泛型并强烈地将结果输入到T.这是不可能的,还是我错过了一些微不足道的东西?
Pie*_*kel 12
他们你也必须制作IResponse通用的:
public interface IResponse<T>
where T : IResult
{
T Result { get; set; }
}
public class Response<T> : IResponse<T>
where T : IResult
{
public T Result { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果你想在IResponse没有通用参数的情况下保持界面,你可以更加高兴.下面有两个接口,其中类透明地实现了没有泛型参数的接口:
public interface IResponse
{
IResult Result { get; set; }
}
public interface IResponse<T> : IResponse
where T : IResult
{
T Result { get; set; }
}
public class Response<T> : IResponse<T>
where T : IResult
{
public T Result { get; set; }
IResult IResponse.Result
{
get { return Result; }
set { Result = (T)value; }
}
}
Run Code Online (Sandbox Code Playgroud)
而且,如果您希望更接近原始实现,可以删除IResponse<T>并获取以下内容:
public interface IResponse
{
IResult Result { get; set; }
}
public class Response<T> : IResponse
where T : IResult
{
public T Result { get; set; }
IResult IResponse.Result
{
get { return Result; }
set { Result = (T)value; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |