引数の検証
引数を正しく検証するには、次のガイドラインに従います。
パブリック メンバー、プロテクト メンバー、または明示的に実装されたメンバーに渡される引数は必ず検証します。 検証が失敗した場合は、System.ArgumentException、またはその派生クラスの 1 つをスローします。
このガイドラインでは、パブリックに参照できるメンバーに検証コードが含まれている必要はありません。 検証を処理する内部メソッドに引数を渡すこともできます。
null 引数が渡された場合、メンバーが null (Visual Basic では Nothing) 引数をサポートしていないときは、System.ArgumentNullException をスローします。
列挙型パラメーターを検証します。
共通言語ランタイム (CLR: Common Language Runtime) では、値が列挙体で定義されたかどうかにかかわらず、列挙値に対して任意の整数値をキャストできます。したがって、列挙型の引数が列挙型で定義された値であると想定することはできません。
System.Enum.IsDefined (System.Type,System.Object) は、バージョン間で異なる可能性がある列挙体のランタイム型に基づいているため、列挙値の範囲チェックに使用しないようにします。
新しいバージョンのライブラリでは、付属する列挙体に値を追加できます。 IsDefined は新しい値に対して true を返すため、新しい値を処理していない既存のコードが新しい値を有効な入力として処理します。したがって、データ検証用に IsDefined を使用するのは危険です。 入力値がプログラムのサポート範囲内であることを確認し、範囲外の場合は例外を返します。
変更可能な引数が渡された場合は、検証後に引数が変更されていないことを確認します。
メンバーがセキュリティに関連する場合は、変更可能なオブジェクトのプライベート コピーを作成し、そのコピーを使用して検証および処理を行います。 これは、変更可能なデータだけに当てはまります。 Uri オブジェクトなど、変更できないデータをコピーする必要はありません。
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計ガイドラインの詳細についてを参照してください、「フレームワークの設計ガイドライン。規則、慣用句、および再利用可能なパターン。ネット ライブラリ」本クシシュトフ Cwalina、ブラッド エイブラムス、アスキー、2005 年発表しました。