2012-03-11 183 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

相关问题