2009-07-21 8 views
9

Je ne suis pas nouveau en C#, mais j'ai trouvé un comportement un peu déroutant.Implémentation de l'interface C#

J'ai une interface

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

J'implémentent l'interface sur une page

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

Cependant, lorsque je tente de faire référence theperson dans la page elle-même je besoin de sauter à travers des cerceaux. Par exemple.

1) ThePerson.Birthday

donne une erreur « Le nom « theperson »n'existe pas dans le contexte actuel. »

2) ((IMissionTripApplicationPage) ce) .ThePerson.Birthday

Cela fonctionne, mais il est affreux.

Existe-t-il un meilleur moyen de référencer les propriétés implémentées?

+0

Pouvez-vous montrer le code spécifique qui ne fonctionne pas? –

Répondre

23

Il semble que vous ayez laissé une ligne dans votre échantillon. Je crois que la ligne ThePerson dans l'implémentation doit lire

Person IApplicationPage.ThePerson { get; set; } 

Ce type de mise en œuvre est connu comme une implémentation d'interface explicite. Cela signifie que le membre ne sera visible que lorsque l'objet est vu à travers une référence du type d'interface.

Si vous voulez que le membre soit visible à travers une référence de type béton, le rendre public et supprimer la mise en œuvre explicite

public Person ThePerson { get; set; } 
+2

+1 bonne explication –

+1

A droite, j'ai laissé tomber la ligne! (copie imprudente). Merci Jared. – Daniel

2

Mettre en oeuvre les propriétés publiques:

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

Modifier

question maintenant éditée pour montrer ces mises en œuvre ont été à l'origine aussi explicite. Donc, je devrais réitérer le mien comme les implémenter comme des implémentations publiques plutôt qu'explicites des propriétés.

+0

Vous ne pouvez pas rendre les implémentations explicites publiques (Application IApplicationPage.Application est explicite!) – mmmmmmmm

+0

Ce n'était pas explicite quand j'ai répondu. Bien sûr, bien sûr. –

Questions connexes