ジェネリッククラスを定義するときに "class"と "new()"の両方の制約を持つことに意味があるのだろうかと思います。次の例のように:ジェネリッククラスに "class"と "new()"の両方の制約があることは意味がありませんか?
class MyParanoidClass<T> where T : class, new()
{
//content
}
両方の制約は、Tが参照型であることを指定します。 "class"制約は暗黙のコンストラクタが存在することを意味するわけではありませんが、 "new()"制約には追加のpublicコンストラクタ定義を持つ "class"が必要です。
私の最終的な質問は、上記のようにジェネリッククラスを定義することによるメリットがありますか、または両方の制約を "new()"でカプセル化していますか?
私は 'new()'は参照型を強制しないと思っています。値の型が持つことができるpublic型のパラメータのないコンストラクタだけです。(値の型であるため、 –
@AdamHouldsworth:値の型は常に*パブリックなパラメータのないコンストラクタを持ちます。 'new()'制約はクラス内のコードが 'new T()'を使って 'T 'の新しいインスタンスを作成できるようにするため、無意味ではありません。これは、制約が省略されている場合は不可能です。 –
@DanielHilgarthはい、私はそれを言うために続けますが、無意味なビットで十分公正です。しかし、それはおそらく 'default(T)'と同じでしょう。 –