次の方法で共有


ジェネリック型でパラメータを使用しすぎないでください

更新 : 2007 年 11 月

TypeName

AvoidExcessiveParametersOnGenericTypes

CheckId

CA1005

カテゴリ

Microsoft.Design

互換性に影響する変更点

あり

原因

外部から参照可能なジェネリック型に、3 つ以上の型パラメータがあります。

規則の説明

ジェネリック型に含まれる型パラメータが増えれば増えるほど、それぞれの型パラメータが表す意味を調べることや覚えることが難しくなります。通常、List<T> のように型パラメータが 1 つの場合や、Dictionary<TKey, TValue> のように型パラメータが 2 つの場合、意味は明確です。型パラメータが 3 つ以上になると、たとえば C# では TooManyTypeParameters<T, K, V>、Visual Basic では TooManyTypeParameters(Of T, K, V) のような場合、ほとんどのユーザーには意味を把握することが困難になります。

違反の修正方法

この規則違反を修正するには、3 つ以上の型パラメータを使用しないようにデザインを変更します。

警告を抑制する状況

デザインで 3 つ以上の型パラメータが絶対に必要な場合を除き、この規則による警告を抑制しないでください。理解しやすく使いやすい構文でジェネリック型を指定することで、習得に必要な時間が短縮され、新しいライブラリの採用率が向上します。

使用例

規則に違反して 3 つのジェネリック型パラメータを定義しているクラスの例を次に示します。

Imports System     

Namespace Samples

    ' Violates this rule 
    Public Class Tuple(Of T1, T2, T3)
    End Class

End Namespace

using System;

namespace Samples
{
    // Violates this rule   
    public class Tuple<T1, T2, T3>   
    {   
    }
}
using namespace System;

namespace Samples
{
    // Violaties this rule
    generic <typename T1, typename T2, typename T3>
    public ref class Tuple
    {
    };
}

関連規則

コレクションは、ジェネリック インターフェイスを実装しなければなりません

ジェネリック型の静的メンバを宣言しません

ジェネリック リストを公開しません

ジェネリック型をメンバ シグネチャ内で入れ子にしません

ジェネリック メソッドは型パラメータを指定しなければなりません

汎用イベント ハンドラのインスタンスを使用します

適切な場所にジェネリックを使用します

参照

参照

ジェネリック (C# プログラミング ガイド)