dev*_*xer 12 .net c# compiler-errors ambiguity
我不敢相信我以前从未遇到过这个,但为什么我的代码会出现编译器错误?
public class Main
{
public Main()
{
var ambiguous = new FooBar(1);
var isConfused = ambiguous.IsValid; // this call is ambiguous
}
}
public class FooBar
{
public int DefaultId { get; set; }
public FooBar(int defaultId)
{
DefaultId = defaultId;
}
public bool IsValid
{
get { return DefaultId == 0; }
}
public bool IsValid(int id)
{
return (id == 0);
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
'FooBar.IsValid'和'FooBar.IsValid(int)'之间的歧义
为什么这个含糊不清?
我认为有两个原因不应该含糊不清:
IsConfused.IsConfused.歧义在哪里?
Ree*_*sey 15
有错误是因为它声明使用是不明确的var.它可能是:
bool isConfused = ambiguous.IsValid;
Run Code Online (Sandbox Code Playgroud)
要么:
Func<int, bool> isConfused = ambiguous.IsValid;
Run Code Online (Sandbox Code Playgroud)
使用var要求编译器能够推断出确切的含义,在这种情况下,有两种可能性.
但是,如果删除,则var仍会出现(不同)错误,因为您不能拥有两个具有相同名称的成员,一个属性和一个方法.
你会得到那个特定的信息是令人困惑的,但是有两个同名的成员是不合法的(除了方法重载).这里您的属性和方法具有相同的名称.这与您不能拥有属性和具有相同名称的内部类的原因相同.字段,属性,方法和内部类都是封闭类型的成员,并且必须具有唯一的名称.
| 归档时间: |
|
| 查看次数: |
10063 次 |
| 最近记录: |