7

オートメーションを使用して別のプログラムを制御する ac# アプリケーションを作成しています。当然、私のプログラムが機能するには、そのプログラムが実行されている必要があります。私のプログラムがアプリケーションを探して見つからない場合、例外をスローしたいと思います (もちろん、後でアプリケーションを開くか、ユーザーに開くように指示するか、または ...)。

カスタム例外を実装するか、既存の NotSupportedException (または他の .NET 例外のいずれか) を使用する必要があります。カスタム例外の場合、何を提案しますか? カスタム例外を実装することを考えていました。それを MyAppNameException と呼び、メッセージを使用して問題の内容を宣言しますか?

プログラムをより読みやすく、ユーザーフレンドリーにする方法で例外をスローするための一般的なルールはありますか、それとも私はこれを考えすぎています:)?

ありがとう!

4

4 に答える 4

8
  1. まず、MyAppCustomException抽象基底クラスとして定義します。

  2. 次に、それから継承しAppNotFoundCustomExceptionます。

このようにして、アプリからすべての例外をキャッチすることも、特定の例外だけをキャッチすることもできます。

概念を説明するコード例を次に示します。

public abstract class MyAppCustomException : System.Exception
{
    internal MyAppCustomException(string message)
        : base(message)
    {
    }

    internal MyAppCustomException(string message, System.Exception innerException)
        : base(message,innerException)
    {            
    }
}

public class AppNotFoundCustomException : MyAppCustomException
{
    public AppNotFoundCustomException(): base("Could not find app")
    {
    }
}

クライアントのtry/catch例を次に示します。

try 
{
   // Do Stuff
}
catch(AppNotFoundCustomException)
{
   // We know how to handle this
}
catch(MyAppCustomException) // base class
{
   // we don't know how to handle this, but we know it's a problem with our app
}
于 2010-08-12T20:42:03.937 に答える
3

私が使用しているフレームワーク ガイドラインの本では、既存の例外とは異なる方法でエラー状態をプログラムで処理できる場合にのみ、カスタム例外を作成する必要があることが示されています。

あなたの場合、バックエンド インストール プログラムを起動するためにカスタム例外を作成したい場合、それはユニークであり、カスタム例外で問題ないと思います。

System.Runtime.InteropServices.ExternalExceptionそれ以外の場合は、階層からの何かが適切な場合があります。

于 2010-08-12T20:54:28.570 に答える
1

ええ、あなたはそれをやり過ぎています。例外をスローしても、良いことは何も起こりません。どんな例外でも、そのプログラムは魔法のように実行を開始するわけではありません。一部のコードが実際にその例外をキャッチして続行しようとするなど、悪いことだけが起こる可能性があります。または、誰もそれをキャッチせず、Windows エラー レポート ダイアログを取得しません。メッセージ ボックスを表示して、Environment.Exit() で終了することもできます。

もちろん、そのプログラムが実行されていないことがわかった場合に実際にそのプログラムを開始すると、ユーザーにとってより便利になる可能性があります。

于 2010-08-12T20:56:25.473 に答える
0

アプリケーションが問題のメソッドをサポートしているため、あなたが提案するように、NotSupportedException を使用しないでください。NotSupportedException は、インターフェイスまたは抽象クラスが実装されているときに使用されますが、一部のメンバーはコンテキストで意味をなさないため完全に実装されていません (出力ストリームからの読み取り、読み取り専用コレクションのクリアなど)。

より近い一致は、メンバーを使用できるが、現在の状態が与えられていない InvalidOperationException です。

「アプリケーション」と言いますが、これは、他の何かで使用するためのコンポーネントではなく、実行可能ファイルを示唆しています。この場合、(呼び出しコードがないため) 呼び出しコードまで例外をバブルするつもりはありませんが、(GUI アプリの場合) ダイアログを表示するか、(コンソール アプリの場合) Console.Error に書き込みます。これにより、例外の Message プロパティの値を表示するだけであるか、特定のメッセージにフラグを付けるためにクラス型が必要なだけである可能性が高くなります。単純に Exception から AppNotRunningException を派生させるか、単に Exception を直接使用するだけで、どちらが最も便利かによって、おそらく完全に機能します。

于 2010-08-12T21:10:47.017 に答える