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

Jos*_*osh 3 c# data-binding interface winforms

我有两个接口,IAuditable和ITransaction.

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

public interface ITransaction : IAuditable {
    double Amount{ get; }
} 
Run Code Online (Sandbox Code Playgroud)

还有一个实现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; } }
}
Run Code Online (Sandbox Code Playgroud)

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

wom*_*omp 5

接口不定义实现 - 它们仅定义所需的附加接口.

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

因此,铸造某些东西ITransaction并不会将其定义为具有IAuditable属性.它简单地转向合同,声明"我可以做所有的方法ITransaction".任何实现ITransaction都需要实现的IAuditable事实并不意味着ITransaction任何不同的定义.

菲尔哈克有一篇很棒的博客文章.

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