C# 方法重载而不重写内容

Faj*_*raa 1 c# methods

我有多个类,但它们都有一个具有相同类型和名称的变量。然后,我有一个方法,它获取我之前提到的变量的值,无论输入类型是什么,都以相同的方式处理它。

下面是例子:

class A{ int i; }
class B{ int i; }
class C{ int i; }
Run Code Online (Sandbox Code Playgroud)

这就是我目前编写处理每个类中 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; }
Run Code Online (Sandbox Code Playgroud)

只为不同的输入类型写了很多,那么如何在不重写方法内容的情况下进行方法重载?

我正在寻找的图像:

int foo(A input),foo(B input),foo(C input) { return input.i*2; }
Run Code Online (Sandbox Code Playgroud)

ger*_*rmi 5

最简单和最惯用的方法是定义interface这样的:

public interface IHaveNumber //or whatever you want to call it
{
    int i { get; set; } // I would propose a better name for this...
}

public int Foo(IHaveNumber input)
{
    //whatever ...
}

public class A : IHaveNumber
{
    public int i { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性是具有(例如)BC派生自A并定义Foo为采用基类:

public class A { public int i { get; set; } }
public class B : A { }
public class C : A { }

public int Foo(A input){ ... }
Run Code Online (Sandbox Code Playgroud)

一般来说,我认为查看有关polymorphism和的文档会有所帮助inheritance