我有两个接口(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 列表绑定(bind)到数据网格并使用自动创建列时,只有 Amount 被绑定(bind)。看不到 CreatedBy 和 CreatedOn。有没有办法让这些值在数据绑定(bind)期间可见?
最佳答案
接口(interface)不定义实现 - 它们只定义所需的额外接口(interface)。
这意味着任何实现ITransaction
的类也需要实现IAuditable
。这并不意味着 ITransaction
也定义了 IAuditable
的属性。
因此,将某些内容强制转换为 ITransaction
不会将其定义为具有 IAuditable
属性。它只是转换为声明“我可以执行 ITransaction
中的所有方法”的契约(Contract)。事实上,任何实现 ITransaction
的东西都需要实现 IAuditable
,但这并不意味着 ITransaction
的定义有任何不同。
Phil Haack 有 a great blog post对此。
如果您想要继承所有属性,您应该使用“Is-A”关系(即抽象类),而不是“可以做”关系(接口(interface))。
关于c# - 数据绑定(bind)期间不绑定(bind)继承的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563763/