2013-10-09 62 views
1

我已經寫在VB.NET下面的方法:如何共享VB.NET方法轉換爲C#

Public Shared Function formatClassNameAndMethod(ByVal prefix As String, ByVal stackFrame As StackFrame) As String 

     Dim methodBase As MethodBase = StackFrame.GetMethod() 

     Return prefix + ":[" + stackFrame.GetMethod().DeclaringType.Namespace + "][" + stackFrame.GetMethod().DeclaringType.Name + "." + methodBase.Name + "] " 

End Function 

我使用移植工具,將其轉換爲C#代碼。它產生了以下方法:

public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame) 
{ 
    MethodBase methodBase = StackFrame.GetMethod(); 

    return prefix + ":[" + stackFrame.GetMethod().DeclaringType.Namespace + "][" + 
      stackFrame.GetMethod().DeclaringType.Name + "." + methodBase.Name + "] "; 
} 

不幸的是,Visual Studio中現在給我下面的錯誤:

Cannot access non-static method 'GetMethod' in static context

據抱怨StackFrame.GetMethod(),因爲這種方法也不是一成不變的。這是爲什麼發生?我明白錯誤是什麼,但我不明白爲什麼我沒有在VB.NET中得到這個。 VB.NET中的共享和C#中的靜態是如何區別的?轉換工具沒有正確轉換這個嗎?

回答

3

VB是不區分大小寫 - 編譯器看到「StackFrame.GetMethod()」,並說:「哦,開發商一定意味‘stackFrame.GetMethod()’

7

GetMethod不是靜態的。這就是它告訴你的。

這意味着您需要先創建一個實例,然後才能調用該方法。你的方法已經有一個StackFrame實例傳入..這只是一個區分大小寫的情況。小寫的S

public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame) 
{ //                  ^^^ this 
    MethodBase methodBase = stackFrame.GetMethod(); 
    //      ^^ lowercase S 
+0

我知道如何解決。問題從這個角度來看,我的興趣在於它爲什麼在VB.NET中工作而不是C# – gonzobrains

+2

這就是爲什麼你不應該將你的參數命名爲與你的類名相同的一個很重要的原因,即使按大小寫不同也是如此 –

+0

@DaveDoknjas好吧,這讓我更加清楚,我認爲我從另一個SO問題中複製了這些代碼,並沒有真正關注參數名稱,你每天都會學到新的東西 – gonzobrains