来自基类的 C# 泛型方法

标签 c# generics methods abstract radix

我有以下情况:

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);
    }
}

如何构建 YYY.Bar() 的声明对于参数bbb这样它就可以接受 CCC 类型的参数?类 ZZZ了解类型 CCC ,但是类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);
    }
}

关于来自基类的 C# 泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69303562/

相关文章:

java - 使用泛型类型参数作为方法参数而不是使用对象类型有什么用?

c# - 如何使用 Expression 构建匿名类型?

c# - 无法将派生类型隐式转换为其基本泛型类型

c# - 如何在未引用的程序集中提取方法的属性值

java - 如何在 java 接口(interface)中使用泛型?

java - 当有很多属性时,不在 Java 中使用 set 和 get 方法

Python 的 __int__() 的 Java 对象方法 :

java - 无法找到我的 Java 纸牌游戏的 hasNext() 和 next() 方法的符号

c# - WPF 应用程序,NotifyIcon(窗体)问题

c# - C# 中的内联 lambda 函数创建行为