我有以下情况:
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
只知道AAA
和BBB
。这是其他语言中的常见做法,例如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/