来自 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);
}
}
如何构建参数 bbb
的 YYY.Bar()
声明,以便它可以接受类型 CCC
的参数? Class ZZZ
知道类型 CCC
,但是 class 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);
}
}
我有以下场景:
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);
}
}
如何构建参数 bbb
的 YYY.Bar()
声明,以便它可以接受类型 CCC
的参数? Class ZZZ
知道类型 CCC
,但是 class 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);
}
}