Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果返回类型不同。。然后它将超载或超载_C#_Oop - Fatal编程技术网

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