gpt4 book ai didi

C# 接口(interface)和泛型的结合。想要返回 而不是它的基本接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 18:08:40 25 4
gpt4 key购买 nike

用一段我认为非常简单的代码踩了自己的脚趾。代码胜于 Eloquent ,就在这里。

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'.
}

编译器不允许我这样做,因为 IResponse 要求 Result 为 IResult,但是我想利用实现类中的泛型并将结果强类型化为 T。这是不可能的,还是我错过了一些微不足道的事情?

最佳答案

你必须制作它们 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; }
}

如果你想保留 IResponse没有通用参数的界面,你可以变得更漂亮。下面有两个接口(interface),其中类透明地也实现了没有泛型参数的接口(interface):

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; }
}
}

而且,如果您想更接近您的原始实现,您可以删除 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; }
}
}

关于C# 接口(interface)和泛型的结合。想要返回 <T> 而不是它的基本接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com