質問
C# では次の違いは何ですか。
public static class ClassName {}
そして:
public class ClassName {}
解決
静的クラスをインスタンス化することはできない、とだけ静的メンバを含めることができます。したがって、静的クラスの呼び出しが通りである:。MyStaticClass.MyMethod(...)
又はMyStaticClass.MyConstant
非静的クラスをインスタンス化することができ、非静的メンバ(インスタンスコンストラクタ、デストラクタ、インデクサ)を含んでいてもよいです。非静的クラスの非静的メンバは、オブジェクトを介して呼び出し可能である
MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);
他のヒント
まず、「静的」の意味について質問された回答に対するコメントです。C#の用語では、「静的」とは、「タイプのインスタンスではなく、タイプ自体に関連する」を意味します。参照または値の代わりにタイプ名を使用して(別のタイプから)静的メンバーにアクセスします。例えば:
// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();
さて、静的クラス...
静的クラスは通常、「ユーティリティ」クラスとして使用されます。正規の例はおそらく次のとおりです System.Math
. 。数学のインスタンスを作成することは意味がありません。それは単に「ある」だけです。いくつかのルール (「できる」と「できない」の両方):
- 静的クラスは常に次から派生します。
object
. 。別の基本型を指定したり、静的クラスにインターフェイスを実装させたりすることはできません。 - 静的クラスにはインスタンス メンバーを含めることはできません。すべての変数、メソッドなどは静的である必要があります。
- 静的クラスはインスタンス コンストラクターとコンパイラーを宣言できません しません デフォルトでパラメータなしのコンストラクタを作成します。(C# 2.0 で静的クラスが登場する前は、インスタンス化を妨げるプライベート コンストラクターを使用して抽象クラスを作成することがよくありました。ここでは必要ありません。)
- 静的クラスは暗黙的に抽象です (つまり、これらは抽象クラスを記述する IL にコンパイルされます)が、追加することはできません。
abstract
自分自身を修飾します。 - 静的クラスは暗黙的にシールされます(つまり、これらはシールされたクラスを記述する IL にコンパイルされます)が、追加することはできません。
sealed
自分自身を修飾します。 - 静的クラス 5月 一般的であること。
- 静的クラス 5月 非静的クラスまたは静的クラスのいずれかに入れ子にすることができます。
- 静的クラス 5月 非静的または静的のネストされた型を持ちます。
- 拡張メソッドを含めることができるのは、静的なトップレベルの非ジェネリック クラスのみです (C# 3.0)。
静的クラスは、から継承することができない。
public static class ClassName {}
静的クラスは、ちょうどグローバル変数のようなものです:あなたがそれらをインスタンス化せずに、あなたのコード内の任意の場所にそれを使用することができます。 たとえば、次のクラス名。ドット演算子の後、あなたはそれのいずれかの特性または機能を使用することができます。の
public class ClassName {}
しかし、あなたは非静的クラスを持っているならば、あなたは、このクラスのインスタンスを作成する必要があります。 たとえばます:
ClassName classNameObject = new ClassName();
すべてのメソッド/プロパティ「正常な」クラスがインスタンスと静的メソッドの組み合わせを含むことができ、一方の は、静的である必要があります。
あなたは(のオブジェクトを作成する)静的クラスをインスタンス化することはできません。そして、それは静的メンバーのみを含めることができます。
例:System.Mathの
静的クラスは、静的メンバのみを含めることができます。
静的メンバーは、最初のクラスをインスタンス化することなく使用することができる。
静的クラスとメンバーがインスタンスを作成することなくアクセスすることができるデータとメソッドを作成するために使用されるクラスの(new
キーワードを使用して、彼らはコンストラクタを持つことができません)。
静的クラスはとても静的クラスは静的メンバーのみが含まれている必要があり、宣言することができます。
このクラスは、クラスを含むプログラムまたは名前空間がロードされているCLRによってロードされます。
これらはまた密封されている、から継承することはできません。
http://www.javaworld.com /javaworld/javaqa/1999-08/01-qa-static2.htmlする - この上に非常に良い記事。これは、Javaのためです。しかし、私は、あまりにもC#での概念べきはず同じだと思います。
Cの静的変数
自動変数としてクラスのローカルの変数は、関数がアクティブではなくなったため、静的変数が消えません。その値は持続します。
Cの静的関数他のファイル内の関数からは認識されない関数。
*cpp の静的データメンバー *データメンバーは、CPPの変数または関数CPP staticが両方のデータメンバーに適用できます。クラス自体は静的にすることができます。
静的クラスこのクラスはオブジェクトをインスタンス化できません