2009-07-21 126 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