C#中的属性名称和方法名称是否相同?

Bri*_*rij 15 .net c# methods properties class

我有一个包含属性的类:

public bool IsMandatory {get;set;}
Run Code Online (Sandbox Code Playgroud)

现在我要添加一个方法IsMandatory(string str).

public bool IsMandatory(string str)
{
  //return false;
  //return true;
}
Run Code Online (Sandbox Code Playgroud)

我收到编译时错误

该类型已包含"IsMandatory"的定义

C#中的方法名称和属性名称不能相同吗?我们以不同的方式使用方法和属性,为什么会出现编译错误?

Mat*_*son 17

这是编译器错误,因为如果名称可能相同会导致混淆.在某些情况下可能会导致歧义 - 例如,在使用Action委托等时,方法不需要括号,以及何时使用var.

  • 编译器可以愉快地区分重载方法 `Set_IsMandatory(bool value)` 和 `Set_IsMandatory(string value)`,并且属性是否只是 [getter 和 setter 方法的语法糖](http://programmers.stackexchange.com /a/62395/59429)那么只要生成的签名不同,允许方法和属性共享相同的名称似乎是合理的?我没有看到你提到的“混乱”,也许你可以考虑扩展你的答案以帮助我理解? (3认同)
  • @Ben考虑一个属性,`P`,它返回一个带有一个参数的方法的委托.现在考虑在同一个类中使用一个名为"P"的方法,该方法采用相同类型的一个参数.如果你要编写`instance.P(x)`,那么你是否通过属性`P`调用方法`P`或调用委托是不明确的. (3认同)