来自 Base Class 的 C# 泛型方法

C# Generic Method from Base Class

我有以下场景:

public abstract class AAA<T> where T : BBB<T>
{
}

public abstract class BBB<T> : AAA<T> where T : BBB<T>
{
    public void SomeMethod() { }
}

public class CCC : BBB<CCC>
{
}

它们依次用于以下内容。

public class YYY
{
    public void Bar(BBB bbb, int value)
    {
        bbb.SomeMethod();
    }
}

public class ZZZ : YYY
{
    public void Foo()
    {
        CCC instance = new CCC();
        Bar(instance, 0);
    }
}

如何构建参数 bbbYYY.Bar() 声明,以便它可以接受类型 CCC 的参数? Class ZZZ 知道类型 CCC,但是 class YYY 只知道 AAABBB。这是其他语言的常见做法,例如Java,但我似乎无法在 C# 中使用它。

您需要使您的方法 Bar 通用:

public class YYY
{
    public void Bar<T>(BBB<T> bbb, int value) where T : BBB<T>
    {
        bbb.SomeMethod();
    }
}

另一种选择是使 YYY 本身通用,但不确定它是否适合您的场景:

public class YYY<T> where T : BBB<T>
{
    public void Bar(BBB<T> bbb, int value)
    {
        bbb.SomeMethod();
    }
}

public class ZZZ : YYY<CCC>
{
    public void Foo()
    {
        CCC instance = new CCC();
        Bar(instance, 0);
    }
}