c# - 数据绑定(bind)期间不绑定(bind)继承的属性

标签 c# winforms data-binding interface

我有两个接口(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/

相关文章:

C# Windows 窗体启动时总是最小化

c# - RichTextBox 从删除的 'keywords' 中移除颜色

c# - DataGrid - 更改编辑行为

c# - 与 SAP 集成

c# - 大型 HTTPResponseMessage 导致 .NET Core 服务器进程内存不足

data-binding - 将标记分配给包含属性数据绑定(bind)的 innerHTML 时, polymer 数据绑定(bind)不起作用

c# - WPF 数据绑定(bind)标签内容

c# - 如何在 C# 控制台应用程序中执行 telnet

c# - 将集合转变为数据网格

c# - 将非属性绑定(bind)到数据网格列 DataField?