14

署名によって等しい 2 つのメンバーがあるとしますが、1 つは静的で、もう 1 つは静的ではありません。

class Foo
{
    public void Test() { Console.WriteLine("instance"); }

    public static void Test() { Console.WriteLine("static"); }
}

しかし、そのようなコードを生成すると、コンパイラ エラーが発生します。

型 'Foo' は、同じパラメーター型を持つ 'Test' というメンバーを既に定義しています

しかし、なぜ?

それを正常にコンパイルすると、次のようになります。

  • Foo.Test()「静的」を出力する必要があります

  • new Foo().Test();「インスタンス」を出力する必要があります

インスタンス 1 の代わりに静的メンバーを呼び出すことはできません。この場合、別のより妥当なコンパイラ エラーが発生するためです。

インスタンス参照ではメンバー 'Foo.Test()' にアクセスできません。代わりに型名で修飾してください

4

1 に答える 1

13

インスタンスメソッドからはどうですか:

Test();

それは何と呼ぶでしょうか?おそらく、静的メソッドよりもインスタンス メソッドに「優先度」を与えたいと思うでしょうが、どちらも適用できます。

たとえ許可されたとしても、読みやすさの観点からこれを行うのは根本的に悪い考えだと思います...たとえば、呼び出したメソッドをTest静的からインスタンスに変更すると、意味が変わります微妙な方法で。

つまり、これが禁止されていても問題ありません:)

于 2011-05-17T15:48:04.320 に答える