使用通用约束实现接口

buc*_*ley 11 c# generics

有点惊讶为什么这不起作用

这是编译器的限制还是不支持它是否合理?

public class Class1<T> : IInterface
    where T : Test2
{
    public T Test { get; private set; }
}

public class Test2
{
}

internal interface IInterface
{
    Test2 Test { get; }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

'ClassLibrary1.Class1<T>' does not implement interface member 'ClassLibrary1.IInterface.Test'. 
'ClassLibrary1.Class1<T>.Test' cannot implement 'ClassLibrary1.IInterface.Test' because it does not have the matching return type of 'ClassLibrary1.Test2'.
Run Code Online (Sandbox Code Playgroud)

cuo*_*gle 9

有关更多更正,请明确实现接口:

public class Class1<T> : IInterface
where T : Test2
{
    public T Test { get; private set; }

    Test2 IInterface.Test
    {
        get { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以避免编译错误.


Jon*_*Jon 5

既然T可以是任何类型派生的Test2,Class1也不会IInterface完全实现.

更一般地说,不可能通过返回协变类型来实现接口:

interface IFoo
{
    object Bar { get; }
}

class Broken : IFoo
{
    string Bar { get; } // you cannot expect to implement IFoo this way!
}
Run Code Online (Sandbox Code Playgroud)