gpt4 book ai didi

c# - 泛型 IAbstract 继承自 IAbstract

转载 作者:可可西里 更新时间:2023-11-01 08:59:15 26 4
gpt4 key购买 nike

我正在努力实现这样的目标:

interface IAbstract
{
string A { get; }
object B { get; }
}

interface IAbstract<T> : IAbstract
{
T B { get; }
}

class RealThing<T> : IAbstract<T>
{
public string A { get; private set; }
public T B { get; private set; }
}

所以我可以这样做:

RealThing<string> rt = new RealThing<string>();
IAbstract ia = rt;
IAbstract<string> ias = rt;
object o = ia.B;
string s = ias.B;

这可能吗?

最佳答案

非常接近。三件事:

  • 你应该使用 newIAbstract<T>表明您知道您正在隐藏现有成员:

    new T B { get; }

    但即使没有它,您仍然只会收到警告。

  • 您需要实现 IAbstract.BRealThing 内,你几乎肯定应该使用显式接口(interface)实现,委托(delegate)给强类型成员:

    object IAbstract.B { get { return B; } }
  • 在您的测试代码中,您需要为 RealThing 指定类型参数:

    RealThing<string> rt = new RealThing<string>();

这很好,甚至在您希望能够获得接口(interface)的非泛型形式时也是一种相当常见的模式。

关于c# - 泛型 IAbstract<T> 继承自 IAbstract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724772/

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