2010-09-27 88 views
0

我使用实体框架和我已经创建了租赁交易的接口:是否可以在实体对象接口上实现接口属性?

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' does not implement interface member 'DomainModel.Abstract.ILeaseTransaction.Void'. 'DomainModel.Models.Type1LeaseTransaction.Void' cannot implement 'DomainModel.Abstract.ILeaseTransaction.Void' because it does not have the matching return type of 'DomainModel.Abstract.ILeaseTransactionVoid'.

我想错误是有道理的,因为返回类型不是接口本身,即使它实现了接口。我对这一切都很陌生,所以我完全失去了这一点。

有没有什么办法让我在ILeaseTransaction上实现嵌套接口属性ILeaseTransactionVoid

谢谢!

回答

1

因此,这似乎不是很流行,但我还是设法找到答案,所以希望有人认为这有用的天:

解决的办法是保持接口的签名与上面相同:

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

,并更改实体类通过如下添加接口特定的属性实现接口的方式:

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

我也正是这个问题,所以我是音响很开心nd这个解决方案....但是我得到2错误与我的执行: 1.显式执行(我相当于你的Void属性)错误: – Laurence 2014-02-26 12:37:58

+0

忽略以前的评论 - 我想出了我的问题。非常感谢发布答案 - 它在这里做了很大的改变! – Laurence 2014-02-26 12:45:14