C# クラスの仕組みと使い方のサンプル

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

目次

クラスとは

class クラス名 {
    フィールド
    メソッド
}
  • クラスは、フィールド(データ)とメソッド(処理)を定義できます。
  • クラスからオブジェクト(インスタンス)を任意の数分、生成できます。
    その場合、オブジェクトごとにデータを保持できます。
    クラスは定義、設計図、型枠のイメージで、オブジェクトは実体です。
  • クラスのフィールドまたはメソッドにstaticを付けると、オブジェクトを生成しないでそのフィールドまたはメソッドを使用できます。
  • クラス名は最初の文字を大文字にします。Pascal記法といいます。
  • 以下は、MicrosoftのC#クラスのリンクです。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/classes

クラスのサンプル

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

using System;

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

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

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

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

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

 

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

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

クラスからオブジェクト(インスタンス)を生成するイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは定義、設計図、型枠でインスタンスは実体です。
new演算子を使用してオブジェクト(インスタンス)を生成します。インスタンス化といいます。
以下は、MicrosoftのC#のクラスとオブジェクトのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/classes-and-objects

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

上記「クラスのサンプル」の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行目は、メソッドを使用してインスタンスの値を表示しています。
構文は、変数.メソッド名です。

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

クラスからオブジェクトを生成しないサンプルです。staticを追加します。

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が付いていない場合は、コンパイルエラーになります。

staticメソッドの実際の使用例

public static double Floor (double d)

staticメソッドの実際の使用例です。
MathクラスのFloorメソッドは、staticメソッドなのでインスタンス化せずに使用できます。

using System;

namespace Project1
{
    class Test1
    {
        static void Main()
        {
            double a = 2.26;
            Console.WriteLine(Math.Floor(a)); // 2
        }
    }
}

10行目は、MathクラスのFloorメソッドです。newでインスタンス化していません。
小数点第一位で切り捨てを行っています。

関連の記事

クラスはクラスを継承して使用できます。
C# クラスの継承のサンプル
C# クラスのメソッド(名前/デフォルト/可変長引数)
C# クラスのメソッド(値渡し/参照渡し/戻り値が複数)
C# コンストラクタのサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る