在C#和VB中,都使用類型參數修飾符來表示類型參數的方差。例如,C#的版本是這樣的:C#和VB中類型參數方差的語法選擇
interface Foo<in X, out Y> { }
和VB版本是這樣的:
Interface Foo(Of In X, Out Y)
End Interface
由於變更規格基本上限制在哪裏以及如何類型參數可以用,我傾向於認爲他們作爲類型參數的附加約束。
我只是好奇他們爲什麼沒有代表如此。我的意思是,爲什麼它們在兩種語言中表示爲類型參數的附加修飾符,而不是添加到類型約束列表中?如果他們類型的限制,C#版本會一直看起來像:
interface Foo<X, Y> where X:in where Y:out { }
和VB版本會一直看起來像:
Interface Foo(Of X As In, Y As Out)
End Interface
因此,沒有人知道,如果有一些背後的推理在這些語言中表達類型參數方差的特定語法選擇,還是僅僅是隨機的?
是的。我同意目前的實施看起來更清潔,我也沒有任何問題。 但是,如果這些只是附加約束條件,給他們一個特殊的地方是沒有意義的,除非他們經常使用。雖然類型參數方差是一個非常好的功能,但我無法想象經常使用它以保證特定的語法。 所以,我只是想知道如果我把它們當作類型參數的約束是錯誤的。 – CodeMangler 2010-04-12 16:54:13
雖然它們不是類型參數的限制,但是......您不應將這些看作是對類型的限制。 – 2010-04-12 16:55:37