2015-05-12 37 views
3

如何將此「java通配符」轉換爲C#格式?「java通配符」到C#?

public abstract class AAA<T extends BBB<?>> extends CCC<T>{} 

我的不正確的C#代碼

public abstract class AAA<T> : CCC<T> where T : BBB<?>{} 

如何轉換BBB<?>

+2

目前根本沒有一個C#等效於此。 –

+0

如果沒有等價物,有什麼用? –

+2

您可以讓BBB類實現非通用接口「YYY」,然後使用「where T:YYY」。 –

回答

0

什麼是BBB到底是什麼?

我敢打賭,BBB<Object>可能會工作; BBB可能是一種協變類型。

+0

BBB 意味着T必須是一個類,定義爲'class Something:BBB '一個封閉的構造的泛型類型。如果所要求的T定義甚至可以允許開放式構建的泛型類型,例如'class Something :BBB '。請記住'列表 list = new List ();'會是一個錯誤。 – Arkaine55

+0

@ Arkaine55但OP在談論C#。我懷疑在這裏'BBB'是一個協變類型,它在C#中,'BBB '*是-a *'BBB ' – ZhongYu

+0

@ bayou-io我的評論只使用C#。 C#4泛型的方差規則需要更明確的定義。 http://stackoverflow.com/questions/2033912/c-sharp-variance-problem-assigning-listderived-as-listbase因此,如果BBB被定義爲「BBB 」,那麼你的答案可能會很好。我仍然不喜歡假設BBB是什麼。 – Arkaine55

1

還有一個類似的問題C# generic "where constraint" with "any generic type" definition?不是特定於Java通配符。在那裏提供的答案可能會幫助你。

從這個問題的答案,可能的類簽名是:在C#

public abstract class AAA<T, TOther> : CCC<T> 
    where T : BBB<TOther> 
{} 

仿製藥必須有一個名爲類型參數,即使你從來沒有打算使用類型明確/含蓄。所有類型參數必須在方法/類/接口的標識符聲明中命名。

注意,如果使用需要的話將有可能約束TOther只是對象類型:

public abstract class AAA<T, TOther> : CCC<T> 
    where T : BBB<TOther> 
    where TOther : object 
{}