我开始用这样的:轻度的意识模糊了明确声明接口的细节与成员
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
}
string IFoo.X { get; set; }
}
它编译为我所期待的。没有惊喜。
然后我去这个:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
X = "";
}
string IFoo.X { get; set; }
}
现在,我得到“X不可用在目前情况下”。
没有料到。
我结束了:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
X = "";
}
private string X;
string IFoo.X { get; set; }
}
而且我从来没有想到这一点。
问题:上面的代码与我目前对thigns的理解无关,因为我看到了两个X。在直观的层面上,我可以看到编译器不需要感到困惑。有人可以用他们的话来说明这里的语言规则吗?
在此先感谢。答案后
更新:我可以铸造到如下界面:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
(IFoo(this)).X = "";
}
string IFoo.X { get; set; }
}
我一直觉得这是一个无赖'。'在这种特殊情况下它保持着高优先级,这会很好(ifoo)this.X – 2010-10-22 15:15:38
是的,或者甚至有一个独立的运算符,就像他们在C++中做的那样(我似乎记得它是 - >,例如'(IFoo )这 - > X') – 2010-10-22 16:02:51