首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有"implements“限制的高级接口

具有"implements“限制的高级接口
EN

Stack Overflow用户
提问于 2016-03-12 06:16:34
回答 1查看 84关注 0票数 2

我有一个特定的问题,我有一个接口IA,它有一个返回另一个接口IB的方法Foo。我希望能够有两个接口IA1 (实现IA)和IB1 (实现IB),并让IA.Foo返回IB1。我希望实现IA的任何其他接口(例如,一些IA2)都会发生这种情况。

我认为唯一可能的方法是通过高阶类型,它看起来像下面的“解决方案”(这不是有效的C#):

代码语言:javascript
复制
public interface IA<M> where M<> : IB<>
{
    M<T> Foo1<T>(T val);
    M<T> Foo2<T>();
}

public interface IB<T>
{
    T Bar();
}

public interface IA1 : IA<IB1> {}

public interface IB1<T> : IB<T>
{
    void Bar1();
}

public interface IA2 : IA<IB2> {}

public interface IB2<T> : IB<T>
{
    void Bar2(T val);
}

public void MyFunc()
{
    IA1 myA1 = GetMyA1();
    IB1<int> myB1Int = myA1.Foo1<int>(2);
    int myB1IntBar = myB1Int.Bar();
    myB1Int.Bar1();
    IB1<string> myB1String = myA1.Foo2<string>();
    string myB1StringBar = myB1String.Bar();

    IA2 myA2 = GetMyA2();
    IB2<string> myB2 = myA2.Foo1<string>("Hello World");
    string myB2StringBar = myB2.Bar();
    myB2.Bar2("Value");
}

有没有办法在C#中模拟这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-03-12 06:37:50

我想你要找的是协方差的概念。你可以在网上找到一些解释。我将向您介绍一些.NET文档,我认为这些文档与这个问题相关,但它们本身可能不是解释协方差概念的最佳方法。

How to define an interface with a covariant type parameter

协变类型参数用out关键字标记(在Visual Basic中为Out关键字,对于MSIL汇编程序为+)。可以将协变类型参数用作属于接口的方法的返回值,或用作委托的返回类型。

The out keyword on generic type parameters

具有协变类型参数的接口

使其方法能够返回比类型参数指定的派生类型更多的派生类型。

我已经使用out关键字修改了您的代码。看一下,看看这是不是你想要的:

代码语言:javascript
复制
public interface IA<T, out M> where M : IB<T>
{
    M Foo(T val);
}

public interface IB<T>
{
    void Bar();
}

public interface IA1<T> : IA<T, IB1<T>> {}

public interface IB1<T> : IB<T>
{
    void Bar1();
}

public interface IA2<T> : IA<T, IB2<T>> {}

public interface IB2<T> : IB<T>
{
    void Bar2();
}

public void MyFunc()
{
    IA1<int> myA1 = GetMyA1();
    IB1<int> myB1 = myA1.Foo(2);
    myB1.Bar();
    myB1.Bar1();

    IA2<string> myA2 = GetMyA2();
    IB2<string> myB2 = myA2.Foo("Hello World");
    myB2.Bar();
    myB2.Bar2();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35950945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档