我可以声明一个接口方法来返回C#中的通用接口吗?

时间:2018-08-28 10:06:17

标签: c# generics inheritance interface

我正在尝试创建一个通用接口,该接口的方法之一将返回一个T,该T也可以是一个Interface,在C#中可以吗?

public interface IGetCard<T>
{
  T WithBoard<T>(string boardName);
}

然后,为了实现这一点:

public class GetCard : IGetCard
{
  public IGetCard WithBoard<IGetCard>(string boardName)
  {
    // ...do stuff...
    return this;
  }
}

我的意图是从实现该接口的各种类中实现此接口方法,例如:

public class DisplayCard : IDisplayCard, IGetCard
{
  public IDisplayCard WithBoard<IDisplayCard>(string boardName)
  {
    // ...do stuff...
    return this;
  }
}

实现此目标的最佳选择是什么?

2 个答案:

答案 0 :(得分:2)

只需在您的类定义中指定通用参数即可:

public interface IGetCard<T>
{
    // be aware that I omitted the <T> from the signature, as T is 
    // already defined on the class-level
    T WithBoard(string boardName); 
}
public class GetCard : IGetCard<MyCard>
{
    public GetCard WithBoard(string boardName)
    {
        // ...do stuff...
        return this;
    }
}

当然,由于IGetCard<MyCard>IGetCard<YourCard>是完全不同的接口,没有相同的 ,因此您也可以在您的类中实现这两者:

public class DisplayCard : ICard<MyCard>, IGetCard<YourCard>
{
    public MyCard WithBoard(string boardName)
    {
        // ...do stuff...
        return ...;
    }
    public YourCard WithBoard(string boardName)
    {
        // ...do stuff...
        return ...;
    }
}

答案 1 :(得分:1)

是的,您可以这样做,

public interface IGetCard<out TCard>
{
    TCard WithBoard(string boardName);
}

public class DisplayCard : IDisplayCard, IGetCard<IDisplayCard>
{
    public IDisplayCard WithBoard(string boardName)
    {
       // ...do stuff...
       return this;
    }
}