Реализация интерфейса C # - PullRequest
9 голосов
/ 21 июля 2009

Я не новичок в 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 »не существует в текущем контексте».

2) ((IMissionTripApplicationPage) this) .ThePerson.Birthday

Это работает, но выглядит ужасно.

Есть ли лучший способ ссылаться на реализованные свойства?

Ответы [ 2 ]

23 голосов
/ 21 июля 2009

Похоже, вы оставили строку в вашем образце. Я считаю, что строка ThePerson в реализации должна выглядеть так:

Person IApplicationPage.ThePerson { get; set; }

Этот тип реализации известен как явная реализация интерфейса. Это означает, что член будет доступен для просмотра только тогда, когда объект виден через ссылку типа интерфейса.

Если вы хотите, чтобы элемент просматривался через конкретную ссылку на тип, сделайте его общедоступным и удалите явную реализацию

public Person ThePerson { get; set; }
2 голосов
/ 21 июля 2009

Реализуйте их как публичные свойства:

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

Редактировать

Вопрос теперь отредактирован, чтобы показать, что они были изначально реализованы как явные. Поэтому я должен переформулировать мои, так как они реализуются как публичные, а не явные реализации свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...