Унаследованные свойства не связаны во время привязки данных - PullRequest
3 голосов
/ 02 апреля 2010

У меня есть два интерфейса, IAuditable и ITransaction.

public interface IAuditable{
    DateTime CreatedOn { get; }
    string CreatedBy { get; }
 }

public interface ITransaction : IAuditable {
    double Amount{ get; }
} 

А класс, который реализует ITransaction, вызывает Transaction.

public class Transaction : ITransaction{
    public DateTime CreatedOn { get { return DateTime.Now; } }
    public string CreatedBy { get { return "aspnet"; } }
    public double Amount { get { return 0; } }
}

Когда я связываю список транзакций IT с сеткой данных и использую столбцы автоматического создания, привязывается только сумма. CreatedBy и CreatedOn не видны. Есть ли способ, которым я могу увидеть эти значения во время привязки данных?

1 Ответ

5 голосов
/ 02 апреля 2010

Интерфейсы не определяют реализацию - они только определяют необходимые дополнительные интерфейсы.

Это означает, что любой класс, который реализует ITransaction, также необходим для реализации IAuditable. Это не означает, что ITransaction также определяет свойства IAuditable.

Следовательно, приведение чего-либо к ITransaction не определяет, что оно имеет свойства IAuditable. Это просто приведение к контракту, который гласит: «Я могу сделать все методы в ITransaction». Тот факт, что все, что реализует ITransaction, также требуется для реализации IAuditable, не означает, что ITransaction определяется иначе.

У Фила Хаака есть отличное сообщение в блоге об этом.

Если вы хотите, чтобы все свойства были унаследованы, вам следует использовать отношение «Is-A» (т.е. абстрактные классы), а не отношение «Can-do» (интерфейсы).

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