0

私は以下の例を経験していました

class Program
{
    public static void Show(String pstrMessage)
    {
        Console.WriteLine(pstrMessage);
    }
    public void Show(Object obj)
    {
        Console.WriteLine(obj.ToString());
    }
    static void Main(string[] args)
    {
        Program program=new Program();
        program.Show("Test Message");
    }
}

静的関数を削除すると、正常に機能しています。
そうしないと、コンパイル時エラーが発生します。
非静的コンテキストでは静的メソッド「show」にアクセスできません。
オブジェクトはすべての基本クラスだと思うので、自動的にオブジェクトに型キャストする必要があります(暗黙の型キャスト)。
エラーが発生する理由を誰でも説明できますか。


ありがとう

4

3 に答える 3

3

Show(Object)を非静的メンバー関数にする理由はありません。その関数も宣言しますstatic

次に、静的関数を呼び出しているため、(インスタンス名でProgram.Show) の代わりに (クラス名で)を使用する必要があります。program.Show

于 2012-10-30T04:49:36.760 に答える
3

複数のメソッド名が一致する場合、コンパイラはオーバーロード解決手順を実行して、より具体的なメソッドを決定します。あなたの場合、静的オーバーロードはたまたま最も具体的なものstringになりますobject。コンパイラは、次を使用して呼び出す必要があると不平を言いますProgram.Show("Test Message");

于 2012-10-30T04:51:18.950 に答える
0

インスタンス関数を使用する場合は、program.Show((Object)"Test Message"); を使用するだけです。

于 2012-10-30T05:21:28.230 に答える