C#クラス(Class)

9036 ワード

クラスを定義すると、データ型の青写真を定義します.これは実際にはデータを定義していませんが、クラスの名前が何を意味するか、つまり、クラスのオブジェクトが何から構成されているか、およびこのオブジェクト上で実行可能な操作を定義します.オブジェクトはクラスのインスタンスであり,クラスを構成する方法と変数がクラスのメンバーとなる.

一、クラスの定義


クラスの定義はキーワードclassで始まり、後にクラスの名前が続く.クラスのボディ.カッコのペアに含まれます.次に、クラス定義の一般的な形式を示します.
 class  class_name 
{
    // member variables
      variable1;
      variable2;
    ...
      variableN;
    // member methods
      method1(parameter_list) 
    {
        // method body 
    }
      method2(parameter_list) 
    {
        // method body 
    }
    ...
      methodN(parameter_list) 
    {
        // method body 
    }
}

注意:
アクセス識別子は、クラスおよびそのメンバーへのアクセスルールを指定します.指定されていない場合は、デフォルトのアクセス識別子が使用されます.クラスのデフォルトアクセス識別子はinternalであり、メンバーのデフォルトアクセス識別子はprivateです.
データ型は変数のタイプを指定し、戻りタイプは戻り方が返すデータ型を指定します.
クラスのメンバーにアクセスする場合は、ポイント(.)を使用します.演算子.
ポイント演算子は、オブジェクトの名前とメンバーの名前をリンクします.
以下の例では、これまで議論されてきた概念を説明します.
using System;
namespace BoxApplication
{
    class Box
    {
       public double length;   //  
       public double breadth;  //  
       public double height;   //  
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();        //   Box1,  Box
            Box Box2 = new Box();        //   Box2,  Box
            double volume = 0.0;         //  

            // Box1  
            Box1.height = 5.0;
            Box1.length = 6.0;
            Box1.breadth = 7.0;

            // Box2  
            Box2.height = 10.0;
            Box2.length = 12.0;
            Box2.breadth = 13.0;
           
            // Box1  
            volume = Box1.height * Box1.length * Box1.breadth;
            Console.WriteLine("Box1  : {0}",  volume);

            // Box2  
            volume = Box2.height * Box2.length * Box2.breadth;
            Console.WriteLine("Box2  : {0}", volume);
            Console.ReadKey();
        }
    }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Box1  : 210
Box2  : 1560

二、メンバー関数とパッケージ


クラスのメンバー関数は、他の変数と同様に、クラス定義に定義またはプロトタイプがある関数です.クラスのメンバーとして、クラスの任意のオブジェクトで操作でき、そのオブジェクトのクラスのすべてのメンバーにアクセスできます.
メンバー変数は、オブジェクトのプロパティ(設計の観点から)であり、カプセル化を実現するためにプライベートを維持します.これらの変数は、共通メンバー関数のみを使用してアクセスできます.
上記の概念を使用して、クラス内の異なるクラスメンバーの値を設定および取得します.
using System;
namespace BoxApplication
{
    class Box
    {
       private double length;   //  
       private double breadth;  //  
       private double height;   //  
       public void setLength( double len )
       {
            length = len;
       }

       public void setBreadth( double bre )
       {
            breadth = bre;
       }

       public void setHeight( double hei )
       {
            height = hei;
       }
       public double getVolume()
       {
           return length * breadth * height;
       }
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();        //   Box1,  Box
            Box Box2 = new Box();		 //   Box2,  Box
            double volume;				 //  


            // Box1  
            Box1.setLength(6.0);
            Box1.setBreadth(7.0);
            Box1.setHeight(5.0);

            // Box2  
            Box2.setLength(12.0);
            Box2.setBreadth(13.0);
            Box2.setHeight(10.0);
       
            // Box1  
            volume = Box1.getVolume();
            Console.WriteLine("Box1  : {0}" ,volume);

            // Box2  
            volume = Box2.getVolume();
            Console.WriteLine("Box2  : {0}", volume);
           
            Console.ReadKey();
        }
    }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
Box1  : 210
Box2  : 1560

三、C#の構造関数


クラスのコンストラクション関数は、クラスの新しいオブジェクトを作成するときに実行されるクラスの特殊なメンバー関数です.
コンストラクション関数の名前はクラスの名前と全く同じで、戻りタイプはありません.
次の例では、コンストラクション関数の概念を説明します.
using System;
namespace LineApplication
{
   class Line
   {
      private double length;   //  
      public Line()
      {
         Console.WriteLine(" ");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         //  
         line.setLength(6.0);
         Console.WriteLine(" : {0}", line.getLength());
         Console.ReadKey();
      }
   }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
 
 : 6

デフォルトのコンストラクション関数
パラメータはありません.しかし、パラメータを持つ構造関数が必要な場合は、パラメータと呼ばれます.
パラメトリックコンストラクタ
.このテクノロジーは、オブジェクトを作成しながらオブジェクトに初期値を割り当てるのに役立ちます.具体的には、次の例を参照してください.
using System;
namespace LineApplication
{
   class Line
   {
      private double length;   //  
      public Line(double len)  //  
      {
         Console.WriteLine(" ,length = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine(" : {0}", line.getLength()); 
         //  
         line.setLength(6.0);
         Console.WriteLine(" : {0}", line.getLength()); 
         Console.ReadKey();
      }
   }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
 ,length = 10
 : 10
 : 6

四、C#の構造関数


クラスの構造関数は、クラスのオブジェクトが範囲外の場合に実行されるクラスの特殊なメンバー関数です.
構造関数の名前は、クラスの名前の前に波形(~)を接頭辞として追加し、値を返さず、パラメータも持たない.
構造関数は、ファイルを閉じる、メモリを解放するなど、プログラムを終了する前にリソースを解放するために使用されます.構造関数は継承または再ロードできません.
次の例では、構造関数の概念を説明します.
using System;
namespace LineApplication
{
   class Line
   {
      private double length;   //  
      public Line()  //  
      {
         Console.WriteLine(" ");
      }
      ~Line() // 
      {
         Console.WriteLine(" ");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();
         //  
         line.setLength(6.0);
         Console.WriteLine(" : {0}", line.getLength());           
      }
   }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
 
 : 6
 

五、C#クラスの静的メンバー


staticキーワードを使用してクラスメンバーを静的に定義できます.クラスメンバーが静的であることを宣言すると、複数のクラスのオブジェクトが作成されても、静的メンバーのコピーが1つしかないことを意味します.
キーワードstaticは、クラスにメンバーが1つしかないインスタンスを意味します.静的変数は、クラスのインスタンスを作成することなく、クラスを直接呼び出すことで定数を定義するために使用されます.静的変数は、メンバー関数またはクラスの定義の外部で初期化できます.クラスの定義の内部で静的変数を初期化することもできます.
次の例では、静的変数の使用方法を示します.
using System;
namespace StaticVarApplication
{
    class StaticVar
    {
       public static int num;
        public void count()
        {
            num++;
        }
        public int getNum()
        {
            return num;
        }
    }
    class StaticTester
    {
        static void Main(string[] args)
        {
            StaticVar s1 = new StaticVar();
            StaticVar s2 = new StaticVar();
            s1.count();
            s1.count();
            s1.count();
            s2.count();
            s2.count();
            s2.count();         
            Console.WriteLine("s1   num: {0}", s1.getNum());
            Console.WriteLine("s2   num: {0}", s2.getNum());
            Console.ReadKey();
        }
    }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
s1   num: 6
s2   num: 6

あなたも1つ
メンバー関数
次のように宣言
static
.このような関数は静的変数にのみアクセスできます.静的関数は、オブジェクトが作成される前から存在しています.次の例では、
せいてきかんすう
の使用方法:
using System;
namespace StaticVarApplication
{
    class StaticVar
    {
       public static int num;
        public void count()
        {
            num++;
        }
        public static int getNum()
        {
            return num;
        }
    }
    class StaticTester
    {
        static void Main(string[] args)
        {
            StaticVar s = new StaticVar();
            s.count();
            s.count();
            s.count();                   
            Console.WriteLine("  num: {0}", StaticVar.getNum());
            Console.ReadKey();
        }
    }
}

上記のコードがコンパイルおよび実行されると、次の結果が得られます.
  num: 3