【发布时间】:2019-12-17 22:20:42
【问题描述】:
我有多个类,但它们都有一个具有相同类型和名称的变量。然后,我有一个方法,它获取我之前提到的变量的值,并以相同的方式处理它,无论输入类型是什么。
这里是例子:
class A{ int i; }
class B{ int i; }
class C{ int i; }
这就是我目前如何编写处理每个类的 int i 值的方法
int foo(A input) { return input.i*2; }
int foo(B input) { return input.i*2; }
int foo(C input) { return input.i*2; }
只是针对不同的输入类型写了很多,那么如何在不重写方法内容的情况下进行方法重载呢?
我正在寻找的图像:
int foo(A input),foo(B input),foo(C input) { return input.i*2; }
【问题讨论】:
-
您可以定义一个通用的
interface并将其用作方法的参数类型:public interface IHaveNumber { int i { get; set; } }public int Foo(IHaveNumber input){ ... } -
@germi 我认为使用 c#8 你甚至可以在接口中使用默认实现。这样做的缺点是它违背了界面应该是什么。
-
@EpicKip 是的,但我不希望初学者指向这一点,因为它已经足够令人困惑了(即使对于有更多经验的人来说)。
-
@germi 完全同意。我知道存在但拒绝使用它,因为它在其他人阅读我的代码时增加了不可预测性。 IMO 接口应该仅是一个合同,而不是一个实现。如果需要,我建议人们使用基类。