是否可以声明接口方法来返回 C# 中的泛型接口?



我正在尝试创建一个通用接口,其中它的方法之一将返回一个 T,该 T 也可能是一个接口,这在 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;
}
}

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

只需在类定义中指定泛型参数:

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 ...;
}
}

是的,你可以这样做,就像这样:

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

最新更新