C#入門 クラスの仕組みとサンプル

C#のクラスの仕組みとサンプルです。

目次

クラスの仕組み クラスの概要
  クラスからオブジェクト(インスタンス)を生成する
  クラスのメソッドとは
  クラスからオブジェクト(インスタンス)を生成しない

クラスの概要

class クラス名 {
    フィールド
    メソッド
}
  • クラスは、フィールドとメソッドを定義できます。
  • フィールドはデータで、メソッドは処理を行います。
  • クラスは設計図や型枠のイメージです。
  • 機能を他のクラスに継承させることができます。
    C# クラスの継承の仕組みとサンプル

以下は、クラスのサンプルです。

using System;

class Class1
{
    private string moji = "色は"; //変数
    private string name; //変数

    public string getName()
    {
        return moji + name;
    }
    public void setName(string name)
    {
        this.name = name;
    }
}

3~16行目までがClass1というクラスです。

3行目は、Class1というクラス名です。最初の文字を大文字にします。Pascal記法といいます。

5,6行目は、クラスの内部で宣言されている変数です。フィールドまたはメンバー変数といいます。
privateのためクラスの外部からアクセスすることができません。

8~15行目は、メソッドです。publicのためクラスの外部からアクセスすることができます。
クラス内の変数やメソッドのことをメンバーといいます。

8行目のstring getName()のstringは、string型の値を返すという意味です。
10行目のreturnは、値を返します。返される値を返り値または戻り値と呼びます。
12行目のstring nameのnameは、引数です。メソッドに値を渡します。
→8行目は()になっているので引数はありません。

クラスからオブジェクト(インスタンス)を生成する

クラスを利用する場合、クラスからオブジェクトを生成する場合と生成しない場合があります。

クラスからオブジェクトを生成する場合は、new演算子を使用してオブジェクト(インスタンス)を生成します。インスタンス化といいます。

データ型 変数 = new クラス名();    //クラスからインスタンスを生成

上記の図はクラスからオブジェクト(インスタンス)を3つ生成したときのイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは設計図や型枠で、インスタンスは実体です。

以下は、クラスからオブジェクトを生成して利用するサンプルです。
上記「クラスのサンプル」のClass1クラスからオブジェクトを生成します。

using System;
class Test1
{
    static void Main()
    {
        Class1 c1 = new Class1();
        Class1 c2 = new Class1();
        Class1 c3 = new Class1();

        c1.setName("赤");
        c2.setName("黄");
        c3.setName("青");

        Console.WriteLine(c1.getName()); // 色は赤です
        Console.WriteLine(c2.getName()); // 色は黄です
        Console.WriteLine(c3.getName()); // 色は青です
    }
}

6~8行目は、上記のClass1クラスのインスタンスを3つ生成しています。
Class1 c1のClass1は、変数の型で、c1は変数です。
この変数には、インスタンスの配置場所(メモリ上のアドレス)が入ります。

10~12行目は、メソッドを使用してインスタンスに値をセットしています。
ポイントは、インスタンスごとに保持するデータが異なる点です。
14~16行目は、メソッドを使用してインスタンスの値を表示しています。
構文は、変数.メソッド名です。

インスタンスを1つのみ生成したい場合は、シングルトンというデザインパターンを使用します。
C# シングルトン(Singleton)のサンプル

クラスのメソッドとは

アクセス修飾子 戻り値の型 メソッド名 (引数)
{
  return 値;
}
  • メソッドは処理を行うことができます。(例:数値を受け取って計算して答えを返す)
  • 「引数」は、メソッドにわたす値です。パラメーターとも言います。
    →引数がない場合もあります。
  • 「戻り値の型」は、メソッドの呼び出し元に値を返すときのデータ型です。
    →戻り値がない場合、戻り値の型の箇所は「void」を指定します。
  • 「return」は、メソッドの呼び出し元に値を返します。返り値または戻り値といいます。
    →returnは必須ではありません。

以下は、メソッドの引数なし、戻り値なしのサンプルです。

using System;

namespace Project1
{
    class Sample1
    {
        public void Test()
        {
            Console.WriteLine("テスト");
        }
    }
    class Test1
    {
        static void Main()
        {
            Sample1 s1 = new Sample1();
            s1.Test(); //テスト
        }
    }
}

17行目は、7行目のメソッドを呼んでいます。
7行目のメソッドは、引数と戻り値がありません。

以下は、メソッドの引数あり、戻り値ありのサンプルです。

using System;

namespace Project1
{
    class Sample1
    {
        public int Test(int a,int b)
        {
            return a + b;
        }
    }
    class Test1
    {
        static void Main()
        {
            Sample1 s1 = new Sample1();
            int num = s1.Test(2,3);
            Console.WriteLine(num); //5
        }
    }
}

17行目は、7行目のメソッドを引数付きで呼んでいます。
9行目で計算した値をreturnで17行目の呼び出し元に返しています。18行目で5が表示されます。

クラスからオブジェクト(インスタンス)を生成しない

クラスからオブジェクトを生成しないで利用する場合はstatic修飾子を追加します。
new演算子がありませんが使用できます。

using System;

namespace Project1
{
    public static class Class1
    {
        public static int CNT = 123;
        public static void Print1()
        {
            Console.WriteLine("456");
        }
    }
    class Test1
    {
        static void Main()
        {
            Console.WriteLine(Class1.CNT);//123
            Class1.Print1(); //456
        }
    }
}

5~12行目は、Class1というクラスです。
7行目は、変数の前にstaticがついています。
static変数クラスフィールド静的フィールドとも呼ばれます。
8行目は、メソッドの前にstaticがついています。
staticメソッドクラスメソッド静的メソッドとも呼ばれます。
17行目は、newでオブジェクトを生成していませんがClass1クラスの変数を参照できます。
構文はクラス名.変数名です。
18行目もnewでオブジェクトを生成していませんがClass1クラスのメソッドを実行できます。
構文はクラス名.メソッド名です。
17,18行目とも参照先にstaticが付いていない場合は、コンパイルエラーになります。

関連の記事

C# クラスの継承の仕組みとサンプル
C# メソッドのサンプル(値渡し/参照渡し他)
C# コンストラクタのサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る