5


2

C 0xは、基本的に型の型を定義できるようにする*概念*を導入します。 型に必要なプロパティを指定します

C#では、 "_http://msdn.microsoft.com/en-us/library/6b0scde8(VS.80).aspx [where] _"句を使用して、総称の*制約*を指定できます。

それらの間に意味上の違いはありますか?

ありがとうございました。

1 Answer


9


覚えておくべき1つのことは、CテンプレートとC#総称がまったく同じではないということです。 これらの違いの詳細については、https://stackoverflow.com/questions/31693/differences-in-generics/31929#31929 [answer]を参照してください。

C 0xの概念の説明にリンクしたページから、Cではテンプレートタイプが特定のプロパティを実装することを指定できるようにしたいという考えのように思えます。 C#では、制約はそれよりも先に進み、総称型をその制約の「of」にします。 たとえば、次のC#コードは、

public GenericListここでT:IDisposable

T *の代わりに使われる型はIDisposableインターフェースを実装しなければならないと言います。 同様に、次のコード:

パブリック抽象クラスABC {}パブリッククラスXYZ:ABC {}

T:ABCの一般GenericList

Tの代わりに使用される型はすべてABC型またはABCから派生したものでなければならないと言います。

C 0xの概念は、Tの代わりに使用される型がABC(またはIDisposable)で定義されているのと同じプロパティを持っている必要があるということだけを言っています。