我正在编写一个具有用于实现数据类型的 OOP 结构的 SDK;
- 首先是一个界面
- 然后是一个抽象实现
- 最后是一个抽象的通用实现
人们可以选择实现接口,或者从任何一个类派生。
public interface IGoo
{
IGoo Duplicate();
...
}
public abstract class Goo : IGoo
{
IGoo IGoo.Duplicate() {
return Duplicate();
}
abstract public Goo Duplicate();
...
}
public abstract class Goo<T> : Goo
{
abstract public Goo<T> Duplicate(); ??????
...
}
我想重新实现 Duplicate 方法,以便它始终返回可能的最具体的类型。即,当您在 IGoo 实例上调用 Duplicate 时,您会得到另一个 IGoo。如果你在 Goo 上调用它,你会得到 Goo,如果你在 -say- Goo<int> 上调用它,你会得到 Goo<int>。并且所有 Duplicate() 方法总是调用最具体的实现。
这可能吗?只有当您可以显式实现接口时才有可能?在这种情况下,我不应该让 Goo<int> 从 Goo 派生,而是让它实现 IGoo 并键入所有低级功能两次?