c#dllが呼び出し側アプリケーションにエラーを返す良い方法は何ですか?
-
05-07-2019 - |
質問
私は、アクセスデータベースのラッパーであるdllを書いています。私の背景はperlでのWeb開発LAMPであるため、一般的にC#はかなり新しいです。
おそらく、msgboxを実行するか、例外をスローすることを除いて、現時点ではわかりませんが、どこから探し始めるかわかりません。ヘルプやリソースは役に立ちます:)
ありがとう〜
解決
おそらく、dll内からメッセージダイアログを表示したくないでしょう。これは、プレゼンテーション層の一部として、クライアントアプリケーションの仕事です。
.Netライブラリアセンブリは、通常、ホストアプリケーションへの例外をバブルアップするため、これが私が検討するアプローチです。
public static class LibraryClass
{
public static void DoSomething(int positiveInteger)
{
if (positiveInteger < 0)
{
throw new ArgumentException("Expected a positive number", "positiveInteger");
}
}
}
これらの例外を処理し、必要に応じてログを記録して表示するのは、ホストアプリケーション次第です。
try
{
LibraryClass.DoSomething(-3);
}
catch(ArgumentException argExc)
{
MessageBox.Show("An Error occurred: " + argExc.ToString());
}
他のヒント
通常、間違ったパラメーターは、ArgumentExceptionまたはそのサブクラスの1つをスローすることで処理されます。
例外をスローしたい。
参照
http://msdn.microsoft.com/en-us/library /ms229007.aspx
ArgumentExceptionやInvalidOperationExceptionなど、最も一般的なフレームワークの例外。も参照してください
クラスライブラリ開発者向けの設計ガイドラインを確認してください:エラー募集および取り扱いのガイドライン
通常、Dllはエラーを報告するためのUI要素を作成しません。さまざまな種類の例外をスロー(レイズと同じ意味)するか、独自の例外を作成して、呼び出しコード(クライアント)がキャッチしてユーザーに報告できます。
public void MyDLLFunction()
{
try
{
//some interesting code that may
//cause an error here
}
catch (Exception ex)
{
// do some logging, handle the error etc.
// if you can't handle the error then throw to
// the calling code
throw;
//not throw ex; - that resets the call stack
}
}
新しい例外をスローしますか?
所属していません StackOverflow