sawahiko’s diary

学習ブログです

第13章:Generic

 

[基本]

  • <T>:型パラメータと呼ぶ。使用時に型を入れられる。<int>や<String>など
  • しかしどんな型でも入れられるようにしておくと、対応できない場合があるので、入れられる型に制約を設ける事が出来る。この型パラメータの制約はいくつか種類がある。

[利点]

  • 従来もObject型で同様の機能を行えた。しかし明示的なキャストが必要である、実行時エラーとなってしまう、等のデメリットが有りGenericの方が優れている。

[型パラメータの制約]

基本クラス制約

例えばGetA()を内部で使うので、GetA()を持つClassAとその派生クラスしか型パラメータに入れさせたくない

Class GenericClass <T> where T : ClassA // ClassAとその派生しかTに入れられない

インターフェイス制約

Class GenericClass <T> where T : IInterface // IInterfaceそのものorその派生or実装したクラスのみ型パラメータに入れさせたくない

コンストラクター制約(new()制約):

引数無しコンストラクタを持つ事を必須としている。これを付けると、内部でコンストラクタが使える=インスタンス生成できる

Class GenericClass <T> where T : new() // 引数無しコンストラクタ必須とします

参照型制約

Class GenericClass <T> where T : Class // 参照型のみTに入れられます。(ex)Class

値型制約

Class GenericClass <T> where T : Struct // 値型のみTに入れられます。(ex)intやstruct

f:id:yoshihi69:20150511181816j:image

 

独習C# 第3版

独習C# 第3版