如果返回类型不同.然后它将超载或过度骑行

本文关键字:超载 返回类型 然后 如果 | 更新日期: 2023-09-27 18:25:28

public int Add(int a, int b) 
public float Add(int a, int b) 

返回的类型不同。

这是重载还是覆盖?

如果访问类型不同怎么办

public int Add(int a, int b) 
private int Add(int a, int b)

你可以帮我吗?

如果返回类型不同.然后它将超载或过度骑行

两者都

不是:它是无效的代码。不能创建两个仅返回类型不同的方法。(或按返回类型和访问修饰符...

如果可以的话,它将是重载 - 覆盖发生在继承层次结构,其中派生类中的方法覆盖基类中声明的虚拟方法。在本例中,您没有指示它们属于不同的类。

重载和重写之间的最大区别在于决定使用哪种方法时:编译器根据编译时类型选择签名,然后根据实际对象的执行时类型选择实现。

因此,如果方法 Derived.M(int) 覆盖Base.M(int),则编译器不在乎 - 它只知道它正在调用Base.M(int)并让 CLR 负责虚拟调度。

但是,如果有Foo.M(int)Foo.M(float)的方法,则编译器在编译时决定使用其中的哪一个。(当然,它们可能是虚拟的,也涉及覆盖。

值得注意的是,跨继承层次结构的重载也很有趣 - 我有一整篇关于重载的文章,其中列出了您可能遇到的一些奇怪之处。

两者都不是。这是一个编译时错误:

error CS0111: Type 'Foo' already defines a member called 
'Add' with the same parameter types

返回类型和访问类型都不是方法签名的一部分。

两者都

不是!

你不能这样做,因为参数需要不同。只是不同的返回类型不起作用。

这在 C# 中是非法的,但根据这个问题,返回不同类型的两个类似函数在其他语言(例如 Perl(中称为重载。

至于有不同的访问修饰符,我不知道是否有任何语言支持这一点。C# 当然不会。