2012-03-11 180 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; 
    } 
} 

then:

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

我個人真的不喜歡那些StringHelperExceptionHelperFormHelper ...當唯一的目的是提供相關的特定類型的靜態方法的類。擴展方法是爲了這個特定的目的。

1
public static void YourStaticMethod() 
{ 

} 

這就是你如何在類中聲明static方法。看起來你可能不確定是否需要static。您需要確定這是否是應作爲實例化對象的一部分調用的功能。如果是這種情況,那麼它不應該是static。否則,如果它是一種實用方法或沿着這些方向的東西,static可能是所需的路線。

如果你想整個類是static,你可以這樣做:

public static class getExceptionMessage 
{ 

} 

請注意,如果你把課static,則該類中的每個成員將還需要static

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

這看起來像一個很好的候選人是擴展方法。 – 2012-03-11 15:48:16

+0

@ M.Babcock:擴展方法肯定會起作用,但在這種情況下,OP正在使用一些特定於演示文稿的格式代碼。我可以很容易地看到像這樣的實用程序類增長,並需要像_lineBreak這樣的自己的成員才能在幾個實用函數中共享。這些概念更好地組織在特定類別中,IMO。 – 2012-03-11 15:53:39

相關問題