public int Add(int a, int b)
public float Add(int a, int b)
Run Code Online (Sandbox Code Playgroud)
返回类型不同.
这是超载还是超载?
如果访问类型不同,该怎么办?
public int Add(int a, int b)
private int Add(int a, int b)
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?
它既不是:它是无效的代码.您不能创建两个仅由返回类型不同的方法.(或者通过返回类型和访问修饰符......)
如果可以的话,它会超载 - 覆盖发生在继承层次结构中,其中派生类中的方法会覆盖在基类中声明的虚方法.在这种情况下,你没有表明他们在不同的班级.
重载和覆盖之间的最大区别在于决定使用哪种方法:编译器根据编译时类型选择签名,然后根据实际对象的执行时类型选择实现.
因此,如果方法Derived.M(int)覆盖Base.M(int),则编译器不关心 - 它只知道它正在调用Base.M(int)并让CLR负责虚拟分派.
但是,如果有方法Foo.M(int)和Foo.M(float)再编译程序将决定在编译时其中哪些将被使用.(当然,它们也可以是虚拟的,也包括覆盖.)
值得注意的是,跨越继承层次结构的重载也很有趣 - 我有一篇关于重载的文章列出了你可能会遇到的一些奇怪的事情.