1

重複の可能性:
C# で静的クラスを使用する場合

質問が無意味またはばかげている場合は申し訳ありませんが、クラス ファイルがほとんどないWindows サービスを作成しようとしています。各クラス ファイルには、別のクラス ファイルを呼び出す関数がいくつかあります。

例えば

クラスファイルには、次のような電子メールを作成するメソッドがあります

public bool CreateEmail()
{
 try
 {
 //code here
 }
 catch (Exception ex)
 {
    //Write to Log
    to create log  call function from **another class file**
 }
}

静的クラスを使用する方が良いのか、クラスごとにオブジェクトを作成してメソッドを呼び出す方が良いのか知りたいのですが、どの方法が推奨されますか?

4

4 に答える 4

3

自問してみてください

  • このメソッドはオブジェクトにどの程度関連していますか。
  • とにかくそれはあなたのオブジェクトの状態を変えますか?

関連性があり、オブジェクトの状態を変更する場合は、クラス内にメソッドを含める必要があります。そうでない場合は、クラスにそのメソッドを含める必要はありません。

あなたの場合、見た目からすると、状態が変わらないことは明らかですが、メールを送信するには他のオブジェクトからの情報が必要なので、これをutilクラス(静的クラス)にして使用します必要なときはいつでも。

于 2012-10-29T07:52:43.213 に答える
3

について考える:

  1. 単体テストを行う必要がありますか? はいの場合、静的クラスは良くなく、テスト能力の設計に従う場合はモックできません。

  2. 単一責任の原則、すべてのメソッドを 1 つのいわゆるユーティリティクラスにまとめないでください。一緒に関連し、SRP に従う別々のクラスにメソッドをグループ化します。

  3. クラスには意味のある名前を付ける必要があります。utilityutilまたはhelperは意味のある名前ではありません

于 2012-10-29T07:47:04.463 に答える
2

クラス ファイルを使用してメソッドをグループ化するだけで、これらのメソッドを呼び出す以外にクラスのインスタンスを必要としない場合は、静的クラスを使用する必要があります。これがその目的です。

于 2012-10-29T07:41:44.403 に答える
2

静的クラスを使用する方が良いのか、クラスごとにオブジェクトを作成してメソッドを呼び出す方が良いのか知りたいです。

マルチスレッド環境で、ロギングで一部のデータを複数の呼び出しで共有する必要がある場合は、呼び出しごとに個別のインスタンスを作成します。それ以外の場合は、静的クラスとメソッドを使用してください。

于 2012-10-29T07:45:08.847 に答える