2009-07-21 154 views
9

我对C#并不陌生,但我发现有一点令人费解的行为。实现接口C#

我有一个接口

public interface IApplicationPage 
{ 
    Person ThePerson { get; set; } 
    Application Application { get; set; } 
} 

我实现接口页面

public partial class tripapplication2 : System.Web.UI.Page, IApplicationPage 
{ 
    Person IApplicationPage.ThePerson { get; set; } 
    Application IApplicationPage.IApplicationPage.Application { get; set; } 
} 

然而,当我试图引用ThePerson在页面本身,我需要赴汤蹈火。例如。

1)ThePerson.Birthday

给出了一个错误说“‘ThePerson’这个名字不会在目前情况下存在。”

2)((IMissionTripApplicationPage)本).ThePerson.Birthday

这工作,但它看起来很可怕。

有没有更好的方法来引用实现的属性?

+0

你能告诉具体的代码不工作? – 2009-07-21 15:52:05

回答

23

看起来你在样本中留下了一条线。我相信实施中的ThePerson行应该是

Person IApplicationPage.ThePerson { get; set; } 

这种类型的实现被称为显式接口实现。这意味着只有通过接口类型的引用才能看到对象时,该成员才可以看到。

如果要让成员通过一个具体的类型引用是可见的,把它公开,并删除明确实施

public Person ThePerson { get; set; } 
2

他们实施的公共属性:

public partial class tripapplication2 : System.Web.UI.Page, IApplicationPage 
{ 
    public Person ThePerson { get; set; } 
    public Application IApplicationPage.Application { get; set; } 
} 

编辑

现在的问题编辑,以显示这些最初实现为明确。所以,我应该重申我的实现他们作为公共而不是显式实现的属性。

+0

你不能公开显式的实现(应用程序IApplicationPage.Application是显式的!) – mmmmmmmm 2009-07-21 16:02:46

+0

当我回答时它并不明确。当然相当正确。 – 2009-07-21 16:07:35