.net では、サブクラスを作成する人に、基本クラスがスローする可能性のある特定の例外の種類をコーディングする必要があることを認識させるにはどうすればよいですか? 理想的には、開発者に例外をキャッチするか、例外が発生する前に必要な検証を実行するように強制することを検討しています...属性を使用して、開発者に例外のコーディングを強制することはできますか?
例えば....
「保存」メソッドを呼び出すコードがいくつかあります。オブジェクトで save が呼び出される前に、いくつかの検証を提供するインターセプト クラスがあります。クラスが有効な状態にない場合、例外をスローします (私が見ているのは私のコードではないため、この時点で例外を使用しないことは受け入れられる解決策ではありません...)、私が疑問に思っているのはコードの消費者に、潜在的な例外をチェックしてコーディングするか、少なくとも例外が発生しないようにチェックを実行する必要があることをどのように明確にしますか...?
簡単に言えば(私のコードは多くのインターフェースなどを使用しているため、これは単なる例です...)
class SavableObject {
public static void Save(){
// validation
ValidationClass.BeforeSave();
// then do the save...
DoSave();
}
public static void DoSave(){
// serialize...
}
}
class ValidationClass {
public static void BeforeSave(T cls){
// perform some checks on class T
// THROW EXCEPTION if checks fail
}
}
したがって、この例では、コードのコンシューマーは次のように SavableObject から継承し、save を呼び出すことができます...例...
class NewSavableThing: SavableObject
{
public static void Save(){
base.Save();
// calls inherited save method which may throw an exception
// At this point the exception may still occur, and the person writing this
// code may not know that the exception will occur, so the question is how do
// I make this clear or force the developer of this class to code for
// the possibility that the exception may occur?!
}
}
サブクラスを構築する人に例外のコーディングを強制できるように、一連の属性を使用できるかどうか疑問に思っています...例...
class SavableObject {
[DeveloperMustCatchException(T)] // specifies that the exception type must be caught
public static void Save(){ ... }
}
class NewSaveableThing: SavableObject {
[ExceptionIgnored] / [ExceptionCaught] // specifies that the developer is aware
// that the exception needs catching/dealing with, I am assuming that
// if this attribute is not provided then the compiler will catch
// and prevent a successful compile...
public static void Save() {
}
}
どんなポインタでも大歓迎です...
編集:明確にするために-開発者が例外を知らないように、開発者に例外が存在することを認めさせたいと思います。理想的には、[ExceptionIgnored] 属性または [ExceptionHandled] (または同様の) 属性が欠落している場合、コンパイラはコンパイルを停止します...これは、例外が考慮されたことを示します。例外が無視されてもかまいません。私がやろうとしているのは、次の開発者が例外の存在を認識していることを確認することです-それが理にかなっている場合. /// コメントで例外を文書化できることを知っています...
例外が文書化されていても、例外を認識しておらず、すべての文書を読んでいない学生が私たちと一緒に働いているので、私は尋ねます。私は彼らが書いたコードのすべての行をチェックすることはできないので、彼らに例外を認めさせ、例外が考慮されていることをコンパイラにチェックさせたいと思っていました.その存在に気づき…