C# 如何使具体实现更通用

C# 如何使具体实现更通用,c#,.net,C#,.net,我有这个接口 public interface IMapper { bool CanMap(List<Field> fields); AccountHolder Map(List<Field> fields); } 公共接口IMapper { bool CanMap(列表字段); 账户持有人映射(列表字段); } 我有多个实现这个接口的类。下面给出了该实现的一个示例 public class DepositorMapper : IMapper {

我有这个接口

 public interface IMapper
{
    bool CanMap(List<Field> fields);
    AccountHolder Map(List<Field> fields);
}
公共接口IMapper
{
bool CanMap(列表字段);
账户持有人映射(列表字段);
}
我有多个实现这个接口的类。下面给出了该实现的一个示例

public class DepositorMapper : IMapper
{
    private readonly IFormUIElementHelper _formHelper;

    public DepositorMapper(IFormUIElementHelper formHelper)
    {
        _formHelper = formHelper;          
    }

    public bool CanMap(List<Fields> fields)
    {
        var taxId = _formHelper.GetFieldValue<string>(fields, FormsAttributes.DepositorTaxId);

        return !string.IsNullOrWhiteSpace(DepositorTaxId);
    }
}
公共类储户映射器:IMapper
{
私有只读IFormUIElementHelper _formHelper;
公共储户映射器(IFormUIElementHelper formHelper)
{
_formHelper=formHelper;
}
公共bool CanMap(列表字段)
{
var taxId=_formHelper.GetFieldValue(字段、FormsAttributes.DepositorTaxId);
return!string.IsNullOrWhiteSpace(DepositorTaxId);
}
}

每个具体实现的唯一区别是“FormsAttributes.DepositorTaxId”。如何使其更通用?

您可以创建这样的抽象类:

public abstract class BaseDepositorMapper : IMapper
{
    private readonly IFormUIElementHelper _formHelper;

    public BaseDepositorMapper (IFormUIElementHelper formHelper)
    {
        _formHelper = formHelper;          
    }

    public bool CanMap(List<Fields> fields)
    {
        var taxId = _formHelper.GetFieldValue<string>(fields, GetDepositorTaxId());

        return !string.IsNullOrWhiteSpace(taxId);
    }

    public abstract DepositorTaxIdType GetDepositorTaxId();
}
公共抽象类BaseDepositorMapper:IMapper
{
私有只读IFormUIElementHelper _formHelper;
public-BaseDepositorMapper(IFormUIElementHelper-formHelper)
{
_formHelper=formHelper;
}
公共bool CanMap(列表字段)
{
var taxId=_formHelper.GetFieldValue(字段,GetDepositorTaxId());
return!string.IsNullOrWhiteSpace(taxId);
}
公共抽象储户TaxidType GetDepositorTaxId();
}

您能详细解释一下“更通用”的含义吗?我们是否应该将其移入?
GetDepositorTaxId
在这种设计中应该受到
保护,而不是公开的。作为一处房产也可能更好,不过这可能取决于具体情况。谢谢!罗梅和塞维。我们是用一处房产做的。