我的课程中有两个项目:一个是公共属性,另一个是带参数的静态方法。
我真的不明白为什么Visual Studio 2010无法看到这两个项目之间的区别。
有人可以向我解释这个吗?
以下是代码:
public bool IsShipped {
get {
#region ' Test Code '
if (!String.IsNullOrEmpty(TrailerNo) || (TruckDate != Global.NODATE)) {
return true;
}
#endregion
return false;
}
}
public static bool IsShipped(string boxNumber) {
var array = GetCrate(boxNumber);
if (array != null) {
foreach (var item in array) {
if (item.IsShipped) {
return true;
}
}
}
return false;
}
这是错误:
错误1'AcpClasses.AcpPackNShip.IsShipped'和'AcpClasses.AcpPackNShip.IsShipped(string)'C:\ Users \ cp-jpool \ My Projects \ VS \ Live \ Common \ Classes \ AcpPackShip.cs之间的歧义242 20 CoilPC
答案 0 :(得分:10)
可以将方法称为委托,而不仅仅是通过调用它。例如,以下可能是该方法的有效使用:
Func<string, bool> myFunction = item.IsShipped;
鉴于该方法不需要用括号实际调用,因此无法确定item.IsShipped
是否应该引用IsShipped
的方法组或作为属性{ {1}}。
即使允许,也可能会导致混淆。从代码维护的角度来看,对于属性/方法来说,最好有不同的名称,即使编译器在某种程度上足够聪明,知道在使用哪一个时(或者更糟的是,如果它只是随意选择一个)。
答案 1 :(得分:8)
您可以使用不同签名重载方法,但不能使用与方法同名的字段或属性。
这是因为方法的原始名称评估为创建委托时使用的方法组。
这段代码清楚地显示了问题:
bool b = item.IsShipped;
Func<string, bool> d = item.IsShipped;