如何将共享 VB.NET 方法转换为 C#
本文关键字:方法 转换 NET VB 共享 | 更新日期: 2023-09-27 18:34:35
我用 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 中的共享和 C# 中的静态工作方式是否有区别? 转换工具没有正确转换吗?
GetMethod
不是静态的。这就是它告诉你的。
这意味着您需要先创建一个实例,然后才能调用该方法。您的方法已经传入了一个StackFrame
实例。这只是区分大小写的情况。小写 S。
public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame)
{ // ^^^ this
MethodBase methodBase = stackFrame.GetMethod();
// ^^ lowercase S
VB 不区分大小写 - 编译器看到"StackFrame.GetMethod(("并说"哦,开发人员一定是"stackFrame.GetMethod(("。