3
有沒有辦法從泛型類中調用擴展,其中變量類也是擴展類?這是一段代碼示例。它不會編譯。我可以從泛型類中調用擴展方法嗎?
public class GenericFoo<TFrom,TTo>
{
public TTo GenericFoo(TFrom A)
{
return A.Bar();
}
}
public static class Extensions
{
public static MyType Bar(this MyExtendedType source)
{
return new MyType();
}
}
這將產生以下錯誤:
'TFrom' does not contain a definition for 'Bar' and the best extension method overload 'MyNamespace.Extensions.Bar(MyNamespace.MyExtendedType)' has some invalid arguments
好,那種失敗的泛型類的擺在首位的目的。但它似乎是準確的。 –
@ArturoHernandez你怎麼能夠在不知道它的參數實際上是'MyExtendedType'的情況下調用'Bar'?泛型允許您創建具有一種或多種類型的行爲模式,而不必準確知道這些類型在編譯時會是什麼樣的,但您仍然必須知道如何使用這些類型來建立模式。 –
@ArturoHernandez我建議定義一個接口'ISource',並將'Bar'定義爲Bar(ISource source),然後使用約束'where TFrom:ISource'。這樣你的泛型類就可以兼容更多類型的參數。 –