2009-07-21 26 views
9

Non sono nuovo di C#, ma ho trovato un comportamento un po 'sconcertante.Interfaccia di implementazione C#

devo un'interfaccia

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

a implementare l'interfaccia in una pagina

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

Tuttavia, quando tento di fare riferimento theperson nella pagina stessa ho bisogno di salti mortali. Per esempio.

1) ThePerson.Birthday

dà un errore che dice "Il nome 'theperson' non esiste nel contesto attuale".

2) ((IMissionTripApplicationPage) questo) .ThePerson.Birthday

questo funziona, ma sembra terribile.

Esiste un modo migliore per fare riferimento alle proprietà implementate?

+0

si può mostrare il codice specifico che non funziona? –

risposta

23

Sembra che tu abbia lasciato una linea nel tuo campione. Credo che la linea ThePerson nell'implementazione dovrebbe leggere

Person IApplicationPage.ThePerson { get; set; } 

Questo tipo di implementazione è noto come implementazione di un'interfaccia esplicita. Ciò significa che il membro sarà visibile solo quando l'oggetto è visto attraverso un riferimento del tipo di interfaccia.

Se si desidera che il membro sia visibile attraverso un riferimento tipo concreto, renderlo pubblico e rimuovere l'applicazione esplicita

public Person ThePerson { get; set; } 
+2

+1 buona spiegazione –

+1

In modo assolutamente corretto, ho lasciato fuori la linea! (copia noncurante). Grazie Jared. – Daniel

2

implementarli come proprietà pubbliche:

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

Modifica

questione ora a cura di mostrare questi sono stati implementati in origine come esplicito. Quindi, dovrei rideterminare il mio come implementarlo come implementazione pubblica piuttosto che esplicita delle proprietà.

+0

Non è possibile rendere pubbliche le implementazioni esplicite (Applicazione IApplicationPage.Application è esplicita!) – mmmmmmmm

+0

Non è stato esplicito quando ho risposto. Abbastanza giusto, naturalmente. –