2009-08-14 5 views
8

構文は多分間違っのC#(私はクラスそのものではない分野について話しています)

public static class Storage 
     { 
       public static string filePath { get; set; } 
     } 

そして

public class Storage 
    { 
     private void Storage() {}; 
     public static string filePath { get; set; } 
    } 

私はからこれを得ましたインターネット上の例。 2番目のものは何ですか?

+0

@Tuzo - 関連は重複していません。その質問は比較です – Gishu

+0

@OP - 私はあなたの2番目のコードスニペットはprivate void Storage(){}; ...私のように – Gishu

+0

@ Gishu申し訳ありません。あなたは正しいです:)しかし、それでもそれを知っている、それを編集する。 –

答えて

12

あなたはILコードを見れば、静的クラスは二つの重要な資質与えabstractsealed次のようになります。あなたはそれが を継承することはできませんそれ

  • からインスタンスを作成することはできません

    • 最初の点は、静的クラスに非静的メンバーを含めることができないことです。静的でないクラスには、静的メンバーの使用方法がたくさんあります。あなたは静的としてクラスを宣言すると

      public class SomeClass 
      { 
          public int SomeInt { get; set; } 
      
          public static SomeClass Create(int defaultValue) 
          { 
           SomeClass result = new SomeClass(); 
           result.SomeInt = defaultValue; 
           return result; 
          } 
      } 
      
  • +1

    Eh?あなたの例は静的なクラスではありませんか? – Thorarin

    +0

    これは静的なクラスではありませんか? – Svish

    +4

    @ Thorarinと@Svish:それは正しいです。それは非静的な型の静的メンバーの使用の最後の質問に答える役割を果たしています(私は元の投稿の過去の質問を解釈しました) –

    3

    多くのクラスには、インスタンスメソッドと静的メソッドの両方があります。例えば、文字列があります。

    String.Format(string, arg0, arg1, arg2) // static method 
    

    そして

    String myString = " Hello world!"; 
    myString = myString.Substring(4);  // instance method 
    

    クラスとメソッドの両方が、それはデザインだけで簡単ですstaticキーワードを必要とする理由あなたが求めている場合。私はあなたが求めているものを見ます、クラスが静的であればもちろん、すべてのメソッドも静的ですが、重複しているようです。私はそれには正当な理由があるかどうかわからない。

    2

    :一般的な使用は、クラスファクトリを持つことである、静的メンバーのみを持つことが許される

    • それはできません(publicコンストラクタはありません)、
    • は継承できません(封印されています)。

    staticとして宣言されていないクラスは、インスタンス化され、継承され、非静的メンバーを持つことができます。ここで

    5

    学ぶための公式/ MSDNのホットスポットである静的クラス 約static classes

    主な機能は次のとおりです。
    *彼らは、静的メンバーのみが含まれています。
    *インスタンス化することはできません。
    *封印されています。彼らは、インスタンスコンストラクタ

    を含めることはできません*
    は、基本的には静的クラスは、静的メソッドとプライベートctorのを持っている「通常の」/非静的クラスと同じです。それを静的としてマークすることは、意図を明確にするのに役立ち、コンパイラがコンパイル時に何らかの事を許可しないようにチェックするのに役立ちます。インスタンス化を禁止します。

    実世界は、私は考えることができる使用しています

    :収容するためにそれを使用するか、

    • ユーティリティメソッド(メソッドタイプの任意のインスタンスに関連付けられていない)などを整理する方法として、最小および最大法の数学
    • 拡張メソッド。 StopWatchのResetメソッドのStopWatchExtensions
    3

    静的クラスは、C#2以降でのみ使用できます。 C#1では、あなたのクラスを封印し、この種の動作を得るためにプライベートコンストラクタを追加することによってインスタンス化できないように指定する必要があります。

    1

    静的クラスは基本的に非静的クラスと同じですが、1つの違いがあります。静的クラスはインスタンス化できません。つまり、newキーワードを使用してクラスタイプの変数を作成することはできません。インスタンス変数がないため、クラス名自体を使用して静的クラスのメンバーにアクセスします。

    この場合、クラスはインスタンス化する必要はありません。ファイルパスと同じで、すべてのオブジェクトに対してクラスStorageの一意の値を占有します。この中

    public class Storage 
        { 
         private void Storage {}; 
         public static string filePath { get; set; } 
        } 
    

    、クラスは非静的で、我々は変数と関数は、2種類のインスタンスとクラスである知っているように

    0

    をインスタンス化する必要があります。

    静的クラス - インスタンス変数なしのクラス変数しかありません。

    したがって、インスタンス化することはできません。Classname.method()によってのみアクセスできます。

    プライベートコンストラクタのみが含まれています。パブリックコンストラクタはありません。

    静的クラスには静的メンバーのみが含まれます。

    関連する問題