c# - 从泛型父类(super class)定义中获取正确的子类方法

标签 c# generics inheritance

如何在多个子类中实现父类(super class)中定义的泛型方法? 我需要由调用子类实例的类型决定正确的子类方法:

var someClassObj = new SubClass();
var = someClassObj.BuildList(v1, v2);

public abstract class SomeBase
{
    public List<T> BuildList<T>(int v1, int v2)
    {
        var results = new List<T>();

        for (int i = v1; i < v2; i++)
        {
            results.Add(AddItem<T>());
        }
        return results;
    }

    protected abstract T AddItem<T>();
}

public class SubClass : SomeBase
{


    protected override BusinessThing AddItem<T>()
    {
        var entity = new BusinessThing();
        entity.Name1 = "1";
        entity.Name2 = "2";
        entity.Name3 = "3";
        return entity;
    }
}

public class BusinessThing
{
    public string Name1 { get; set; }
    public string Name2 { get; set; }
    public string Name3 { get; set; }
}

上面没有构建:覆盖方法 'T SomeBase.AddItem()' 时无法更改返回类型

最佳答案

你可以让你的基类泛化而不是它的方法:

public abstract class SomeBase<T>
{
    public List<T> BuildList(int v1, int v2)
    {
        var results = new List<T>();

        for (int i = v1; i < v2; i++)
        {
            results.Add(AddItem());
        }
        return results;
    }

    protected abstract T AddItem();
}

public class SubClass : SomeBase<BusinessThing>
{
    protected override BusinessThing AddItem()
    {
        var entity = new BusinessThing();
        entity.Name1 = "1";
        entity.Name2 = "2";
        entity.Name3 = "3";
        return entity;
    }
}

关于c# - 从泛型父类(super class)定义中获取正确的子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543546/

相关文章:

C# 委托(delegate)和函数调用

c# - 使用多个异步客户端到多个服务器时的ObjectDisposedException

java - Map.Entry.comparingByValue().reversed() 的类型是什么?

javascript - AngularJS - $emit/$on 或范围继承哪个更好?

c# - List<T>.ForEach() 方法消失了吗?

c# - FxCop 投诉 : Exposed concrete xml types and a bad improvement

c# - 通用的通用的

c# - 从 Func<object,string> 到 Func<string,string> 的转换有效,但到 Func<int,string> 失败

c# - 返回自身类型的方法的接口(interface)

c++ - 抽象类的用户定义构造函数