【发布时间】:2018-04-12 19:52:38
【问题描述】:
假设我有一个实现WorksWithType<TypeA> 和WorksWithType<TypeB> 的接口WorksWithType<T> 和类MyClass。
如果我的界面看起来像
public interface WorksWithType<T> {
void DoSomething(T foo);
void DoSomethingElse();
}
在MyClass 中实现两个不同的DoSomething 方法重载很容易。
public class MyClass : WorksWithType<TypeA>, WorksWithType<TypeB> {
{
public void DoSomething(TypeA fooA) { ... }
public void DoSomething(TypeB fooB) { ... }
...
}
但是,似乎没有办法实现DoSomethingElse 的重载。在我看来,我觉得我应该能够将界面上的签名更改为
void DoSomethingElse<T>();
然后用
重载类public void DoSomethingElse<TypeA>() { ... }
public void DoSomethingElse<TypeB>() { ... }
如果有的话,这里的正确方法是什么?
【问题讨论】:
-
为了实现这一点,您需要方法上的泛型参数,而不是接口上的。
-
@dlatikay:我认为它们肯定是非常密切相关的,但是这个更好,因为它处理 one 方面(只是实现)而不是 1)为什么我会收到有关类型参数隐藏的警告? 2)如何调用我想要的方法? 3)(甚至没有明确说明,部分原因是问题1)我如何实现接口?
-
拜托,下一个类型你声明一个接口的名称以大写
I开头,如IWorksWithType<T>。它是 C# 中的通用标准。
标签: c# oop interface overloading