簡體   English   中英

如何將Shared VB.NET方法轉換為C#

[英]How to convert Shared VB.NET method to C#

我用VB.NET編寫了以下方法:

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現在給我以下錯誤:

在靜態上下文中無法訪問非靜態方法“ GetMethod”

它抱怨StackFrame.GetMethod()因為該方法不是靜態的。 為什么會這樣呢? 我知道錯誤是什么,但是我不明白為什么我沒有在VB.NET中得到這個錯誤。 VB.NET中的Shared和C#中的static如何工作之間有區別? 轉換工具沒有正確轉換嗎?

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

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

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

VB不區分大小寫-編譯器看到“ StackFrame.GetMethod()”,並說“哦,開發人員一定要使用“ stackFrame.GetMethod()”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM