加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 类型推断和继承

发布时间:2020-12-15 21:37:28 所属栏目:百科 来源:网络整理
导读:我有一个基类,它有一些使用类型推断的功能…… public abstract class ProcessorT{ ... public IProcessBuilderT,TResult ProcessTResult(ExpressionFuncT,TResult propertyOfT) { } public abstract void SetProcessors();} 然后我有两个班: public class
我有一个基类,它有一些使用类型推断的功能……

public abstract class Processor<T>
{
    ...
    public IProcessBuilder<T,TResult> Process<TResult>(Expression<Func<T,TResult>> propertyOfT)
    {
    }

    public abstract void SetProcessors();
}

然后我有两个班:

public class EntityBase
{
    public string Name { get; set; }
}

public class EntityChild : EntityBase
{
    public string Description { get; set; }
}

在这两个我也有两个处理器配置这两个类:

public class EntityBaseProcessor : Processor<EntityBase>
{
    public override void SetProcessors()
    {
        base.SetProcessors();
        this.Process(entity => entity.Name)
            .DoSomething();
    }
}

现在问题是我想为子类重用已配置的基本实体类进程以避免代码重复:

public class EntityChildProcessor: EntityBaseProcessor
{
    public override void SetProcessors()
    {
        base.SetProcessor();
        this.Process(entity => /* entity.Description is of course missing */)
            .DoSomething();
    }
}

我显然很累,因为我似乎找不到重用处理器类的可行方法,因为继承的处理器类也应该使用继承的实体类进行处理.

我当然可以重复代码并将我的其他处理器编写为:

public class EntityChildProcessor: Processor<EntityChild>
{
    public override void SetProcessors()
    {
        base.SetProcessor();
        // repeated code for inherited property
        this.Process(entity => entity.Name)
            .DoSomething();
        this.Process(entity => entity.Description)
            .DoSomething();
    }
}

解决方法

将EntityBaseProcessor声明为泛型类是多么合理?像这样的东西:

public class EntityBaseProcessor<TEntityBase> : Processor<TEntityBase>
    where TEntityBase : EntityBase
{
    public override void SetProcessors()
    {
        base.SetProcessors();
        this.Process(entity => entity.Name)
            .DoSomething();
    }
}

public class EntityChildProcessor : EntityBaseProcessor<EntityChild>
{
    public override void SetProcessors()
    {
        base.SetProcessors();
        this.Process(entity => entity.Description)
            .DoSomething();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读