在数据绑定期间不会绑定继承的属性

时间:2010-04-01 21:16:21

标签: c# winforms data-binding interface

我有两个接口,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; } }
}

当我将ITransactions列表绑定到数据网格并使用自动创建列时,只有Amount被绑定。没有看到CreatedBy和CreatedOn。有没有办法在数据绑定期间可以看到这些值?

1 个答案:

答案 0 :(得分:5)

接口没有定义实现 - 它们只定义了所需的附加接口。

这意味着任何实现ITransaction的类也需要实现IAuditable。这并不意味着ITransaction也定义了IAuditable的属性。

因此,向ITransaction投射内容并不会将其定义为具有IAuditable属性。它只是转向合同,声明“我可以在ITransaction”中执行所有方法。实施ITransaction所需的任何实施IAuditable的事实并不意味着ITransaction的定义不同。

菲尔·哈克(Phil Haack)已经a great blog post了。

如果要继承所有属性,则应使用“Is-A”关系(即抽象类),而不是“可以做”关系(接口)。