Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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_Class_Methods_Properties - Fatal编程技术网

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;
}