39

クラスAとクラスBの2つのクラスがあります。

static class ClassA
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

class ClassB
{
    static string SomeMethod()
    {
        return "I am a Static Method";
    }
}

ClassA.SomeMethod();との違いを知りたいClassB.SomeMethod();

クラスのインスタンスを作成せずに両方にアクセスできる場合、非静的クラスを使用してメソッドを静的として宣言するのではなく、静的クラスを作成する必要があるのはなぜですか?

4

4 に答える 4

40

唯一の違いは、非静的クラスの静的メソッドを拡張メソッドにすることはできないということです。


言い換えれば、これは無効です:

class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}

これは有効ですが:

static class Test
{
    static void getCount(this ICollection<int> collection)
    { return collection.Count; }
}
于 2011-03-09T05:54:02.580 に答える
14

静的クラスには、静的メンバーのみを含めることができます。

静的メソッドは、複数のclassBオブジェクトを作成する場合でも、単一の共有SomeMethod関数のみを使用することを保証します。

技術的には、ClassAのSomeMethodが静的でなければならないことを除いて、違いはありません。

于 2011-03-09T05:54:29.167 に答える
3

静的メソッドのみを含む非静的クラスがある場合は、そのクラスのインスタンスを作成できます。ただし、そのインスタンスを意味のある形で使用することはできません。注意:コンストラクターを定義しない場合、コンパイラーがコンストラクターを追加します。

静的クラスにはコンストラクターがないため、そのインスタンスを作成することはできません。また、インスタンスメソッドをコンパイラに追加すると(静的メソッドを意味する場合)、コンパイラはエラーを出します。

ドキュメントも参照してください。

于 2012-09-19T11:30:44.127 に答える
1

静的メソッドはクラスに属し、非静的メソッドはクラスのオブジェクトに属します。つまり、非静的メソッドは、それが属するクラスのオブジェクトに対してのみ呼び出すことができます。静的メソッドは静的メンバーにのみアクセスできます。非静的メソッドは、静的メソッドが呼び出されたときにクラスがインスタンス化されない可能性があるため(クラス自体で呼び出された場合)、静的メンバーと非静的メンバーの両方にアクセスできます。その他の場合、非静的メソッドは、クラスがすでにインスタンス化されている場合にのみ呼び出すことができます。静的メソッドは、クラスのすべてのインスタンスで共有されます。メソッドがC++/ Java / C#で呼び出されるときはいつでも、暗黙の引数('this'参照)が他のパラメーターと一緒に/なしで渡されます。静的メソッド呼び出しの場合、

于 2011-03-09T08:49:18.087 に答える