重载虚拟通用方法

时间:2018-03-10 14:14:03

标签: c# generics

我想问一下是否有人可以帮助我。

我有基础通用类

public class Base<T> where T : new()
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual string Foo()
    {
        throw new NotImplementedException("");
    }
}

然后我

public class A : Base<A>
{
    public override string Foo()
    {
        return string.Empty;
    }
}

在我的主要代码中,我想做类似的事情:

A entity = new A();
var x = entity.Foo();

List<A> entityList = new List<A>();  
var y = entityList.Foo();

我的代码适用于实体和x,但我想重载Foo以便在列表中调用。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

对于这样的事情(当你需要扩展现有的类而不修改它的源代码时)你可以创建extension method,例如

public static class BaseExtensions
{
    public static string Foo<T>(this IEnumerable<Base<T>> items) where T : new()
    {
        var builder = new StringBuilder();

        foreach (var item in items)
        {
            builder.Append(item.Foo());
        }

        return builder.ToString();
    }
}

连接数组/列表中所有 Foo 项的结果。