我有以下问题:
我想拥有以下对象:
到目前为止我所做的是:
这是我的问题:
我怎样摆脱这个?感谢您提供任何帮助或建议,使整个结构更加美观。
编辑:这是一些代码。
// 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);
}
}
答案 0 :(得分:0)
覆盖时无法更改功能签名
这意味着您无法进行此转换public BaseDTO GetData() -> public CustomerDTO GetData()
因此,您需要将CustomerClient更改为
public CustomerClient : BaseClient
{
public override BaseDTO GetData()
{
// CustomerDTO : BaseDTO
return new CustomerDTO(this.CustomerNameTextbox);
}
}
或寻找另一个班级设计。