泛型IAbstract <T>继承自IAbstract

Che*_*tah 10 c# generics

我想要实现这样的事情:

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; }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

RealThing<string> rt = new RealThing<string>();
IAbstract ia = rt;
IAbstract<string> ias = rt;
object o = ia.B;
string s = ias.B;
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Jon*_*eet 10

非常接近.三件事:

这很好,甚至是一种相当常见的模式,适合您希望能够获得非泛型形式的接口.


GSe*_*rjo 7

是的,几乎没有变化

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

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

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

    object IAbstract.B
    {
        get { return B; }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以写

var rt = new RealThing<string>();
IAbstract ia = rt;
IAbstract<string> ias = rt;
object o = ia.B;
string s = ias.B;
Run Code Online (Sandbox Code Playgroud)