2012-03-11 10 views
0

私は次の内のメソッドをコーディングしたいと思います:クラス内で静的関数を宣言するにはどうすればよいですか?

namespace WebUx.Helpers.CSharp 
{ 
    public class getExceptionMessage 
    { 

     < Method here > 

     var exError = e.Message; 
        if (e.InnerException != null) { 
         exError += "<br>" + e.InnerException.Message; 
         if (e.InnerException.InnerException != null) { 
          exError += "<br>" + e.InnerException.InnerException.Message; 
         } 
        } 
    } 
} 

誰かが、私は、クラスやメソッドを宣言するべきかを教えてもらえます。私は宣言するのが最善の方法以上に混乱し、私はそれが静的であるべきだと思うが、良い方法があるかどうかは分からない。このメソッドは、コード内の多くの場所から呼び出すことができます。私はおそらく値exErrorの文字列を返すべきだと思います。

答えて

5

をコード内のどこでも使用できます。

public static class ExceptionExtensions 
{ 
    public static string GetFormattedErrorMessage(this Exception e) 
    { 
     if (e == null) 
     { 
      throw new ArgumentNullException("e"); 
     } 

     var exError = e.Message; 
     if (e.InnerException != null) 
     { 
      exError += "<br>" + e.InnerException.Message; 
      if (e.InnerException.InnerException != null) 
      { 
       exError += "<br>" + e.InnerException.InnerException.Message; 
      } 
     } 

     return exError; 
    } 
} 

try 
{ 
} 
catch (Exception ex) 
{ 
    string msg = ex.GetFormattedErrorMessage(); 
} 

私は個人的にすべてのそれらのように本当にないStringHelperExceptionHelperFormHelper ...唯一の目的は、特定のタイプに関連する静的メソッドを提供することを目的とするクラス。この特定の目的のために拡張メソッドが作成されます。

1
public static void YourStaticMethod() 
{ 

} 

これは、あなたのクラス内にstaticメソッドを宣言する方法です。あなたがstaticである必要があるかどうかわからない場合があります。インスタンス化されたオブジェクトの一部として呼び出される必要がある機能であるかどうかを判断する必要があります。その場合、staticであってはなりません。そうでなければ、それらがユーティリティメソッドか、それらの行に沿ったものであれば、staticが望ましいルートかもしれません。

あなたはクラス全体がstaticになりたかった場合、あなたはこれを行うだろう:あなたは、クラスstaticを作る場合、そのクラスのすべてのメンバーはまたstaticする必要があること

public static class getExceptionMessage 
{ 

} 

注意を。

4

コード全体で使用するためのヘルパー/ユーティリティクラスを作成しようとしています。私はあなたが正しい軌道に乗っていると思います。静的なクラス/メソッドはこのコンセプトに適しています。

静的クラスとメソッドは次のように宣言されています

public static class MyUtilClass 
{ 
    public static string GetExceptionMsg(Exception ex) 
    { 
       var exError = e.Message; 
       if (e.InnerException != null) { 
        exError += "<br>" + e.InnerException.Message; 
        if (e.InnerException.InnerException != null) { 
         exError += "<br>" + e.InnerException.InnerException.Message; 
        } 
       } 

     return exError; 
    } 
} 

そして、あなたのクライアントコードで、あなたがこのようなクラスを使用します:もの「ヘルパークラス」を避けるために

try 
{ 
    // do something 
} 
catch (Exception ex) 
{ 
    var errMsg = MyUtilClass.GetExceptionMsg(ex); 
    // display or log errMsg 
} 
+1

これは、拡張メソッドの候補に似ています。 –

+0

@ M.Babcock:拡張メソッドは確実に機能しますが、この場合、OPはプレゼンテーション固有の書式設定コードを使用しています。このようなユーティリティクラスを簡単に見ることができ、_lineBreakのような独自のメンバがいくつかのユーティリティ関数の間で共有される必要があります。そのような概念は、特定のクラス、IMOでより整理されています。 –