2

私は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 の動作に違いはありますか? 変換ツールはこれを正しく変換できませんでしたか?

4

2 に答える 2

8

GetMethod静的ではありません。これがあなたに言っていることです。

つまり、メソッドを呼び出す前にインスタンスを作成する必要があります。メソッドにはすでにStackFrameインスタンスが渡されています..これは、大文字と小文字の区別にすぎません。Sを小文字にします。

public static string formatClassNameAndMethod(string prefix, StackFrame stackFrame)
{ //                                                                     ^^^ this
    MethodBase methodBase = stackFrame.GetMethod();
    //                     ^^ lowercase S
于 2013-10-09T21:57:59.490 に答える
4

VB は大文字と小文字を区別しません。コンパイラは「StackFrame.GetMethod()」を認識し、「ああ、開発者は「stackFrame.GetMethod()」を意味していたに違いありません。

于 2013-10-10T04:27:16.517 に答える