Можно ли реализовать свойство интерфейса в интерфейсе Entity Object? - PullRequest
0 голосов
/ 27 сентября 2010

Я использую Entity Framework и создал интерфейс для транзакций аренды:

public interface ILeaseTransaction
{
    int ID { get; }
    DateTime Date { get; }
    decimal Amount { get; }
}

Затем для реализации интерфейса на объекте сущности я создал пустой частичный класс:

public partial class Type1LeaseTransaction : ILeaseTransaction
{

}

Это работает нормально, однако транзакции также могут иметь ноль или одну пустоту, которые также являются объектами сущностей. Я попытался реализовать пустоты следующим образом:

public interface ILeaseTransactionVoid
{
    int TransactionID { get; }
    DateTime Date { get; }
    int TypeID { get; }
}

И пустой частичный класс ...:

public partial class Type1LeaseTransactionVoid : ILeaseTransactionVoid
{

}

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь добавить ILeaseTransactionVoid как свойство к интерфейсу LeaseTransaction:

public interface ILeaseTransaction
{
    int ID { get; }
    DateTime Date { get; }
    decimal Amount { get; }
    ILeaseTransactionVoid Void { get; } // This throws an error
}

При попытке собрать я получаю следующую ошибку:

DomainModel.Models.Type1LeaseTransaction не реализует элемент интерфейса DomainModel.Abstract.ILeaseTransaction.Void. DomainModel.Models.Type1LeaseTransaction.Void не может реализовать DomainModel.Abstract.ILeaseTransaction.Void. потому что у него нет соответствующего возвращаемого типа 'DomainModel.Abstract.ILeaseTransactionVoid'.

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

Можно ли как-нибудь реализовать свойство вложенного интерфейса ILeaseTransactionVoid в ILeaseTransaction?

Спасибо!

1 Ответ

1 голос
/ 02 октября 2010

Так что это не казалось очень популярным, однако мне удалось найти ответ, так что, надеюсь, кто-то найдет это полезным однажды:

Решением было оставить подпись интерфейса такой же, как указано выше:

public interface ILeaseTransaction
{
    int ID { get; }
    DateTime Date { get; }
    decimal Amount { get; }
    ILeaseTransactionVoid Void { get; } // This throws an error
}

И измените способ, которым класс Entity реализует интерфейс, добавив свойство, специфичное для интерфейса, следующим образом:

public partial class Type1LeaseTransactionVoid : ILeaseTransactionVoid
{
    ILeaseTransactionVoid ILeaseTransaction.Void
    {
        get { return (ILeaseTransactionVoid)Void; }
    }
}
...