[英]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.