「静的」クラスとは何ですか? 質問する

「静的」クラスとは何ですか? 質問する

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)。

おすすめ記事