C# 如果返回类型不同。。然后它将超载或超载
返回的类型不同 这是重载还是重写 如果访问类型不同呢C# 如果返回类型不同。。然后它将超载或超载,c#,oop,C#,Oop,返回的类型不同 这是重载还是重写 如果访问类型不同呢 public int Add(int a, int b) public float Add(int a, int b) 你能帮我吗 两者都不是:这是无效代码。不能创建两个仅在返回类型上不同的方法。(或通过返回类型和访问修饰符…) 如果可以的话,这将是重载——重写发生在继承层次结构中,其中派生类中的方法重写基类中声明的虚拟方法。在本例中,您没有给出它们在不同类中的指示 重载和重写之间的最大区别在于何时决定使用哪种方法:编译器根据编译时类型
public int Add(int a, int b)
public float Add(int a, int b)
你能帮我吗 两者都不是:这是无效代码。不能创建两个仅在返回类型上不同的方法。(或通过返回类型和访问修饰符…) 如果可以的话,这将是重载——重写发生在继承层次结构中,其中派生类中的方法重写基类中声明的虚拟方法。在本例中,您没有给出它们在不同类中的指示 重载和重写之间的最大区别在于何时决定使用哪种方法:编译器根据编译时类型选择签名,然后根据实际对象的执行时类型选择实现 因此,如果方法
Derived.M(int)
重写Base.M(int)
,那么编译器就不在乎了——它只知道自己在调用Base.M(int)
,并让CLR负责虚拟分派
但是,如果存在方法Foo.M(int)
和Foo.M(float)
,那么编译器将在编译时决定使用哪种方法。(当然,它们也可以是虚拟的,并包含覆盖。)
值得注意的是,跨继承层次结构的重载也可能很有趣——我有一个完整的列表,列出了您可能遇到的一些奇怪之处。两者都不是
您不能这样做,因为参数需要不同。只是不同的退货类型不起作用。也不起作用。这是一个编译时错误:
public int Add(int a, int b)
private int Add(int a, int b)
返回类型和访问类型都不是方法签名的一部分。这在C#中是非法的,但根据,返回不同类型的两个类似函数在其他语言(例如Perl)中称为重载
至于有不同的访问修饰符,我不知道是否有任何语言支持。当然不会。如果我调用该方法而不检索返回值会怎么样。。哪一个将被调用?谁在阻止你输入并尝试它?我不认为可以说“返回类型不是方法签名的一部分”。@ken2k确实是它的一部分
error CS0111: Type 'Foo' already defines a member called
'Add' with the same parameter types