我有以下場景:
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()for 引數的宣告,bbb以便它可以接受型別為 的引數CCC?類ZZZ知道型別CCC,但類YYY只知道AAA和BBB。這是其他語言(例如 Java)中的常見做法,但我似乎無法使其在 C# 中作業。
uj5u.com熱心網友回復:
您需要使您的方法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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311200.html
上一篇:如何使通用回呼函式做出反應
下一篇:在trait中參考泛型的生命周期
