2009-07-21 18 views
9

No soy nuevo en C#, pero he encontrado un comportamiento que es un poco desconcertante.Implementando la interfaz C#

que tienen una interfaz

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

que implementan la interfaz en una página

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

Sin embargo, cuando intento hacer referencia a theperson en la propia página tengo que pasar por el aro. Por ejemplo.

1) ThePerson.Birthday

da un error que dice "El nombre 'theperson' no existe en el contexto actual."

2) ((IMissionTripApplicationPage) esto) .ThePerson.Birthday

Esto funciona, pero se ve horrible.

¿Hay una mejor manera de hacer referencia a las propiedades implementadas?

+0

¿Puede mostrar el código específico que no funciona? –

Respuesta

23

Parece que dejó una línea en su muestra. Creo que la línea ThePerson en la implementación debe leer

Person IApplicationPage.ThePerson { get; set; } 

Este tipo de implementación se conoce como una implementación de interfaz explícita. Esto significa que el miembro solo será visible cuando el objeto se vea a través de una referencia del tipo de interfaz.

Si desea que el miembro sea visible a través de una referencia de tipo hormigón, hacerlo público y retire la aplicación explícita

public Person ThePerson { get; set; } 
+2

+1 buena explicación –

+1

Absolutamente bien, ¡dejé la línea! (Copia descuidada). Gracias Jared. – Daniel

2

las implementan como propiedades públicas:

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

Editar

pregunta ahora editado para mostrar las mejoras se concretaron originalmente como explícita. Por lo tanto, debería replantear los míos para implementarlos como implementaciones públicas de las propiedades en lugar de explícitas.

+0

No puede hacer que las implementaciones explícitas sean públicas (la aplicación IApplicationPage.Application es explícita) – mmmmmmmm

+0

No fue explícita cuando respondí. Muy bien, por supuesto, por supuesto. –

Cuestiones relacionadas