C#中的属性名和方法名可以相同吗?
我有一个包含属性的类:C#中的属性名和方法名可以相同吗?,c#,.net,class,methods,properties,C#,.net,Class,Methods,Properties,我有一个包含属性的类: public bool IsMandatory {get;set;} 现在我添加了一个方法IsMandatory(stringstr) 我得到一个编译时错误 该类型已包含“IsMandatory”的定义 C#中的方法名和属性名不能相同吗?我们以不同的方式使用方法和属性,为什么会出现编译错误?这是一个编译器错误,因为如果名称可能相同,则会导致混淆。在某些情况下,可能会产生歧义-例如,当使用动作委托等时,方法不需要括号,当使用var简言之:这是不允许的。成员名称(字段、属性
public bool IsMandatory {get;set;}
现在我添加了一个方法IsMandatory(stringstr)
我得到一个编译时错误
该类型已包含“IsMandatory”的定义
C#中的方法名和属性名不能相同吗?我们以不同的方式使用方法和属性,为什么会出现编译错误?这是一个编译器错误,因为如果名称可能相同,则会导致混淆。在某些情况下,可能会产生歧义-例如,当使用动作委托等时,方法不需要括号,当使用
var
简言之:这是不允许的。成员名称(字段、属性和方法)必须为
唯一性。如果编译器告诉您不能,那么您实际上在问什么?为什么你不能?@TimRogers,是的,我在问为什么我们不能?它怎么知道你要调用哪一个?有一些编程语言允许这种事情,而且它们使用起来很糟糕。感谢C#编译器阻止了您采用错误的做法。编译器可以很高兴地区分重载方法
Set\u IsMandatory(bool value)
和Set\u IsMandatory(string value)
,如果属性是公正的,那么允许方法和属性共享相同的名称似乎是合理的,只要得到的签名是不同的?我没有看到你提到的“混乱”,也许你可以考虑扩展你的答案来帮助我理解?现在考虑在同一个类中有一个叫做“代码> P<代码”的方法,它采用同一个参数。如果您要编写instance.P(x)
,那么您是调用方法P
,还是通过属性P
调用委托,这将是不明确的。这个答案没有解释原因和时间。例如,允许方法重载。
public bool IsMandatory(string str)
{
//return false;
//return true;
}