我正在尝试创建一个通用接口,该接口的方法之一将返回一个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;
}
}
实现此目标的最佳选择是什么?
答案 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;
}
}