我从这开始:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
}
string IFoo.X { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它按照我的预期进行编译.没有惊喜.
然后我去看看:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
X = "";
}
string IFoo.X { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我得到'X在当前上下文中不可用'.
没想到.
我最终得到:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
X = "";
}
private string X;
string IFoo.X { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我从来没有想过这一点.
问题:上面的代码没有与我目前对thigns的理解相符,因为我看到了两个X. 在直观的层面上,我可以看到编译器不需要混淆.有人可以用他们的话说出这里的语言规则吗?
提前致谢.
回答后更新:我可以将接口转换为如下界面:
interface IFoo
{
string X { get; set; }
}
class C : IFoo
{
public void F()
{
(IFoo(this)).X = "";
}
string IFoo.X { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因为您已经显式地实现了接口(通过编写string IFoo.X而不是仅仅string X),所以您只能通过接口访问该接口属性.
所以你需要这样做
public void F()
{
((IFoo)this).X = "";
}
Run Code Online (Sandbox Code Playgroud)
或者不明确声明接口,即
public string X { get; set; }
Run Code Online (Sandbox Code Playgroud)