【发布时间】:2013-12-21 01:00:37
【问题描述】:
我正在编写一个 SDK,它具有用于实现数据类型的 OOP 结构;
- 首先是一个界面
- 然后是抽象实现
- 终于有了抽象的通用实现
人们可以选择实现接口,或者从任一类派生。
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 方法,以便它始终返回可能的最具体的类型。 IE。当你在一个 IGoo 实例上调用 Duplicate 时,你会得到另一个 IGoo。如果你在 Goo 上调用它,你会得到 Goo,如果你在 -say- Goo
这可能吗?只有当您可以显式实现接口时才有可能?在这种情况下,我不应该让 Goo
【问题讨论】:
-
抱歉,我在给出第一个答案时忽略了这个细节,哈哈。下面使用 System.Object 作为返回值的答案呢?它对类型匹配保持友好。
-
嗯,返回对象比返回 IGoo 还要糟糕。我知道这只是语法糖,但如果可能的话,我想避免任何强制转换。从 Goo 和 Goo
实现 IGoo 接口似乎是最好的解决方案,即使这确实意味着我必须在两个类中维护一堆相同的代码。
标签: c# oop overriding overloading shadowing