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
から派生します。別の基本型を指定したり、静的クラスにインターフェイスを実装させたりすることはできません。abstract
修飾子を自分で追加することはできません。sealed
修飾子を自分で追加することはできません。静的クラスも継承できませんが、静的メンバーを持つ非静的クラスは継承できます。
public static class ClassName {}
静的クラスは、グローバル変数のようなものです。インスタンス化せずに、コードの任意の場所で使用できます。次に例を示します。ClassName。ドット演算子の後は、そのプロパティまたは関数を使用できます。
public class ClassName {}
ただし、非静的クラスがある場合は、このクラスのインスタンスを作成する必要があります。例えば:
ClassName classNameObject = new ClassName();
静的クラスのすべてのメソッド/プロパティmustは静的であるのに対し、「通常の」クラスはインスタンスと静的メソッドの混合を含むことができます。
静的クラスには静的メンバーのみを含めることができます。
静的メンバーは、最初にクラスをインスタンス化せずに使用できます。
静的クラスをインスタンス化(のオブジェクトを作成)することはできません。また、静的メンバーのみを含めることができます。
例:System.Math
http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html -これに関する非常に良い記事。これはJava用です。しかし、私はC#でもコンセプトは同じであるべきだと思います。
静的クラスと静的メンバーは、クラスのインスタンスを作成せずにアクセスできるデータとメソッドを作成するために使用されます(new
キーワードを使用して、コンストラクターを持つことはできません)。
静的クラスは、それ自体のオブジェクトIDに依存しないときに宣言できるため、静的クラスには静的メンバーのみを含める必要があります。
このクラスは、クラスを含むプログラムまたは名前空間が読み込まれるときにCLRによって読み込まれます。
また、それらは密封されており、継承することはできません。
cの静的変数
自動変数としてクラスにローカルな変数ですが、関数がアクティブでなくなっても静的変数は消えません。それらの値は持続します。制御が戻った場合、静的変数は同じ値を持ちます
cの静的関数他のファイルの関数からは見えない関数。
*cppの静的データメンバー*データメンバーは変数またはcppの関数にすることができますstaticは両方のデータメンバーに適用されますクラス自体は静的にすることができます "そのクラスのすべてのオブジェクトによって共有される静的データメンバーの1つのコピー」静的データメンバーは、静的データメンバーのみにアクセスできます
静的クラスこのクラスはオブジェクトをインスタンス化できません