我有两个接口,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列表绑定到数据网格并使用自动创建列时,仅绑定金额。看不到CreatedBy和CreatedOn。有什么办法可以使这些值在数据绑定期间可见?

最佳答案

接口未定义实现-它们仅定义所需的其他接口。

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

因此,将某些内容强制转换为ITransaction并不将其定义为具有IAuditable属性。它只是在合同上声明“我可以在ITransaction中完成所有方法”。实施ITransaction还需要任何实施IAuditable的事实并不意味着ITransaction的定义有所不同。

菲尔·哈克(Phil Haack)对此做了a great blog post

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

10-05 22:49