2011-01-13 9 views
2

可能性の重複:誰でも静的クラスを作成する理由
When to Use Static Classes in C#について静的クラス

。どのクラスでも静的メソッドを宣言でき、クラスインスタンスを作成せずにそのメソッドを呼び出すことができます。どのような状況で人が静的なクラスを作成し、静的なクラスと通常のクラスの主な違いは何かを教えてください。

ありがとう

答えて

2

静的クラスはインスタンス化できません。主な用途は、クラスにインスタンスメソッドがなく、人々が誤ってクラスを「新しく」しようとしないようにすることです。

1

静的クラスのすべてのメソッドはすべてstaticです。静的クラスでは通常のメソッドを宣言することはできません。

静的クラスと通常クラスの違い。

スタティッククラスのオブジェクトを作成することはできません。スタティッククラスのメソッドを使用する場合はclassname.MethodNameを使用しますが、通常のクラスではまずクラスのオブジェクトを作成してから、通常のクラスのメソッドにアクセスできます。

static class ex。

Class1.functionname(); 

通常クラスex。

Class1 cs = new class1(); 

cs.functionname(); 

functionnameはプライベートであってはいけません。

2

静的クラスにはコンストラクタを含めることはできません。最初に呼び出された静的コンストラクタだけがメンバーにアクセスされます。

これは基本的に違いがあります。パフォーマンス上の理由から、インスタンスメンバーが誤って追加されていないことを確認できるので、コンパイラーが別のインスタンスを無料で取得します。コンパイラは、このクラスのインスタンスを作成できないことを保証します。

スタティッククラスもシールされているため継承できません。

http://msdn.microsoft.com/en-us/library/79b3xss3(v=VS.100).aspx

静的クラスは、基本的には、非静的クラスと同じであるが、1つの違いがある:静的クラスがインスタンス化することができません。つまり、新しいキーワードを使用してクラスタイプの変数を作成することはできません。

もう一つの有効なポイントががあり拡張メソッドはC#3.0で静的クラス

http://en.wikipedia.org/wiki/Extension_method

拡張メソッドの新しい言語機能に宣言することで、しかし、後者のコードを可能にします。このアプローチでは、静的クラスと静的メソッドが必要です。

1

違いは静的クラスをインスタンス化できないことです。クラスをインスタンス化したくない場合は、クラスを静的にします。これは、スレッドの問題を扱う場合や、すべてのスレッドがクラスの同じインスタンスを使用することを保証する場合に便利です。

より哲学的なシナリオは、インスタンス化する必要のないクラス(たとえば、データベースアプリケーションを構築する場合など)を作成し、すべてのデータベースアクセスの処理を行うクラスを1つ作成する場合です。それは基本的に単なるメソッドの集まりです。クラスを静的にすることは、単にデザインをより一貫性のあるものにするためのステップになります。

2

一般的には、静的クラスを記述しないことをお勧めします。

拡張メソッドは静的クラスに生きているのに、あなたがそれらをしたい場合があります。これが静的クラスを持つ最善の理由です。

拡張メソッドとして意味がなく、オブジェクトモデルに収まらない静的メソッドがたくさんある場合は、静的メソッドのコレクションの余地があるかもしれません。これは特に、アプリを再設計できない場合に当てはまります。

時には、これは、あなたが変更できないサードパーティ製のものを扱っているために起こることがあります。静的メソッドしか持たないクラスで終わった場合、インスタンスを作成する人は、自分が行ったことを明確に理解していないので静的にする必要があります。

ほとんどの場合、私のアドバイスはすべてです。静的メソッド、クラスおよびデータは避けてください。私はを絶対にと言っているわけではありません。

関連する問題