クラスAとClassBの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();
の違いを知りたい
クラスのインスタンスを作成せずに両方にアクセスできる場合、非静的クラスを使用してメソッドを静的として宣言するのではなく、静的クラスを作成する必要があるのはなぜですか?
onlyの違いは、非静的クラスの静的メソッドは 拡張メソッド。
つまり、これは無効です。
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; }
}
静的クラスには、静的メンバーのみを含めることができます。
静的メソッドにより、複数のclassBオブジェクトを作成する場合でも、単一の共有SomeMethod関数のみを使用することが保証されます。
技術的には、ClassAのSomeMethod must staticであることを除いて、違いはありません。
静的メソッドのみを含む非静的クラスがある場合、そのクラスのインスタンスを作成できます。ただし、そのインスタンスを有意義に使用することはできません。注:コンストラクターを定義しない場合、コンパイラーがコンストラクターを追加します。
静的クラスにはコンストラクタがないため、インスタンスを作成できません。また、インスタンスメソッドを追加すると、コンパイラはエラーを返します(静的メソッドを意味します)。
docs もご覧ください。
静的メソッドはクラスに属し、非静的メソッドはクラスのオブジェクトに属します。つまり、非静的メソッドは、それが属するクラスのオブジェクトでのみ呼び出すことができます。静的メソッドは、静的メンバーのみにアクセスできます。非静的メソッドは、静的メソッドと非静的メンバーの両方にアクセスできます。これは、静的メソッドが呼び出された時点で、クラスがインスタンス化されない可能性があるためです(クラス自体で呼び出される場合)。他の場合、非静的メソッドは、クラスが既にインスタンス化されている場合にのみ呼び出すことができます。静的メソッドは、クラスのすべてのインスタンスで共有されます。 C++/Java/C#でメソッドが呼び出されるたびに、暗黙的な引数(「this」参照)が他のパラメーターとともに/なしで渡されます。静的メソッド呼び出しの場合、静的メソッドはクラスに属するため、「this」参照は渡されません。したがって、「this」参照はありません。