Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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#_.net_Oop_Polymorphism_Overloading - Fatal编程技术网

C#方法重载取决于签名或参数数量?

C#方法重载取决于签名或参数数量?,c#,.net,oop,polymorphism,overloading,C#,.net,Oop,Polymorphism,Overloading,请指导我C#方法重载:它是否取决于方法签名、返回类型或参数数量?什么样的更改对于说明方法正在被重载或可能被重载至关重要 谢谢这取决于签名-即参数的数量和类型 可以使用相同数量的参数使用不同的重载,但类型不同。例如,请参见类-一个方法的多个重载,这些重载采用一个参数,但每个重载采用不同的类型。如果您指的是重载解析,则它取决于: 方法的名称:) 参数的数量 参数的类型 参数的名称(如果使用命名参数) 参数是否可选 类型参数的数目 就创建重载方法而言,参数名称和“可选性”不相关,因此例如,这是无效

请指导我C#方法重载:它是否取决于方法签名、返回类型或参数数量?什么样的更改对于说明方法正在被重载或可能被重载至关重要


谢谢

这取决于签名-即参数的数量和类型


可以使用相同数量的参数使用不同的重载,但类型不同。例如,请参见类-一个方法的多个重载,这些重载采用一个参数,但每个重载采用不同的类型。

如果您指的是重载解析,则它取决于:

  • 方法的名称:)
  • 参数的数量
  • 参数的类型
  • 参数的名称(如果使用命名参数)
  • 参数是否可选
  • 类型参数的数目
就创建重载方法而言,参数名称和“可选性”不相关,因此例如,这是无效的:

// Not valid: same signature
void M(int x, string y)
void M(int z, string a = "")

它们在方法名称、类型参数数量以及参数计数和类型方面具有相同的签名。

重载考虑了数量、顺序和参数类型。 出于重载目的,不考虑返回类型

注意,有一个例外: 如果某个方法在某个类c中被重写#尝试首先在被重写的类中查找兼容的版本,然后只查找祖先。 比如说

Class A
{
  public virtual void SetProperty(string value)
  {
  }     
}

Class B: Class A
{
  public override void SetProperty(object value)
  {
  }
}
如果您执行以下操作:

  var b= new B();
  b.SetProperty("hello"); // will resolve to overridden method in class B even though you have a more specific version in its parent (class A)

如果参数的数量不同或参数的类型不同,则称方法为重载,但如果方法的返回类型不同(不会编译),则不能重载

e、 g.下面的3个被称为重载,第4个不会被称为重载,即使存在其他3个,也不会编译:

public int Add(int a, int b); // Method 1, overloaded
public int Add(int a, int b, int c); // Method 2, overloaded
public int Add(double a, double b); // Method 3,  overloaded

public double Add(double a, double b); // Method 4 (invalid, will conflict with Method 3 above)
根据MSDN上的


方法的签名由方法的名称及其每个形式参数的类型和种类(值、引用或输出)组成,按从左到右的顺序考虑。方法的签名不包括返回类型,也不包括可能为最右边的参数指定的params修饰符。

谢谢Oded,我们怎么说签名?返回类型也是签名的一部分吗?我今天接受了一次采访,有人问了我这个问题。我们可以说它取决于签名或参数数量吗?@haansi-不,签名不包括返回类型。谢谢Jon,方法重载是否取决于方法签名或参数数量?我今天在一次采访中提出了这个问题,我不确定,我想知道。Thanks@haansi:参数的数量是签名的一部分。谢谢Vijay,方法重载是否取决于方法签名或参数的数量?我今天在一次采访中提出了这个问题,我不确定,我想知道。Thanks@haansi:实际上,它依赖于这两种类型,但重载或方法签名取决于参数的数量和类型,而不是返回类型。应该这样问:方法重载是取决于方法的返回类型还是方法的参数?我已经用MSDN的方法签名和重载链接更新了答案。这是方法重写,而不是重载。!