C# では次の違いは何ですか?
public static class ClassName {}
そして:
public class ClassName {}
ベストアンサー1
まず、回答に対するコメントで、「static」の意味について質問がありました。C# の用語では、「static」は「型のインスタンスではなく、型自体に関連する」という意味です。参照や値ではなく、型名を使用して (別の型の) 静的メンバーにアクセスします。例:
// 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)。