如果返回类型不同.然后它将超载或过度骑行
本文关键字:超载 返回类型 然后 如果 | 更新日期: 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# 当然不会。