0

これら2つのクラスの違いは何ですか?

public static class MyClass
{
    public static string SayHello()
    {
        return "Hello";
    }
}

public static class MyClass
{
    public string SayHello()
    {
        return "Hello";
    }
}

静的クラスにあるため、2 番目の SayHello メソッドも静的ですか? もしそうなら、メソッドが静的クラスで定義されているときに静的キーワードをメソッドに含める理由はありますか?

4

4 に答える 4

8

2 番目の例は C# では実行できません。コンパイル時にエラーが発生します。

'SayHello': 静的クラスでインスタンス メンバーを宣言できません

したがって、キーワードを使用して static calss のメンバーを宣言する必要があります。static

于 2011-08-18T22:17:07.420 に答える
1

静的クラスはインスタンス化できないため、2 番目のコードはコンパイルできません。非静的メソッドは、インスタンス化されたクラスでのみアクセスできます。

于 2011-08-18T22:22:25.393 に答える
0

「...したがって、静的クラスを作成することは、静的メンバーとプライベート コンストラクターのみを含むクラスを作成することとほぼ同じです。プライベート コンストラクターは、クラスがインスタンス化されるのを防ぎます。

静的クラスを使用する利点は、インスタンス メンバーが誤って追加されていないことをコンパイラが確認できることです。コンパイラは、このクラスのインスタンスを作成できないことを保証します。」

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

于 2011-08-18T22:18:25.503 に答える
0

静的クラスは封印されており、インスタンス メンバーを含めることはできません。静的メソッドはインスタンスではなく Type の一部であり、静的メソッドはインスタンス メンバーにアクセスできません。静的メソッドは仮想化できませんが、オーバーロードできます。静的メソッドは、「callvirt」の代わりに「call」IL オペコードも発行します。

静的クラスには、引数を取らない静的コンストラクターがあり、型を最初に使用する前に呼び出されます。

于 2011-08-18T22:19:28.887 に答える