首页 > 解决方案 > 我怎么知道两个班级都来自同一个通用班级

问题描述

这是示例代码。我怎么知道 Foo 和 Bar 都来自同一个类 Base<>?

class Program
{
    static void Main(string[] args)
    {
        var foo = typeof(Foo).IsAssignableFrom(typeof(Base<,>));
        var bar = typeof(Bar).IsAssignableFrom(typeof(Base<,>));
    }
}

public abstract class Base<TInput, TOutput>
{
    public abstract TOutput Run(TInput input);
}


public class Foo : Base<int, string>
{
    public override string Run(int input)
    {
        return input.ToString();
    }
}

public class Bar : Base<string, string>
{
    public override string Run(string input)
    {
        return input.Replace(".", "").ToString();
    }
}

在此处输入图像描述

标签: c#reflectiongeneric-programming

解决方案


要使您的代码编译,您需要更改Base<>为,Base<,>因为它有两个类型参数。仍然IsAssignableFrom不应该工作,也许这样的事情会为你工作:

var foo = typeof(Foo).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));
var bar = typeof(Bar).BaseType.GetGenericTypeDefinition() == (typeof(Base<,>));

?


推荐阅读