具有通用 DTO 接口的 UserControl 继承

UserControl inheritance with generic DTO interface

我遇到以下问题:

我想要以下对象:

到目前为止我所做的是:

这是我的问题:

我怎样才能摆脱这个?感谢您提供任何帮助或建议,使整个结构更漂亮。

编辑:这是一些代码。

// in my "standard functionality"
BaseClient Client { get; } // or IClientDataAccess<BaseDTO>
void ButtonSave()
{
    var data = this.Client.GetData(); // in runtime, this.Client is CustomerClient
    // the following works, don't worry. :-)
    if (this.CheckLogic.CheckData(data))
    {
        this.DataAccess.SaveData(data);
    }
}

public interface IClientDataAccess<T> where T : BaseDTO
{ T GetData(); }

public BaseClient : UserControl, IClientDataAccess<BaseDTO>
{ 
    public virtual BaseDTO GetData() 
    { 
        return new BaseDTO(); // some stupid default
    }
}

public CustomerClient : BaseClient, IClientDataAccess<CustomerDTO>
{
    public new CustomerDTO GetData()
    {
        // CustomerDTO : BaseDTO
        return new CustomerDTO(this.CustomerNameTextbox);
    }
}

覆盖时不能更改函数签名。
这意味着您不能进行此转换 public BaseDTO GetData() -> public CustomerDTO GetData().
所以您需要将 CustomerClient 更改为

public CustomerClient : BaseClient
{
    public override BaseDTO GetData()
    {
        // CustomerDTO : BaseDTO
        return new CustomerDTO(this.CustomerNameTextbox);
    }
}

或寻找另一个 class 设计。