クラス

スポンサーリンク

クラス

クラス (class) は,フィールド (変数),メソッドなどのメンバを持つユーザ定義型です。

次のプログラムは,時計を表すクラス Clock を定義したものです。

using System;

// 時計を表すクラス
class Clock
{
    // フィールド
    public int Hour;    // 時
    public int Minute;  // 分

    // 時刻を表示するメソッド
    public void PrintTime()
    {
        Console.WriteLine("{0:00}:{1:00}", Hour, Minute);
    }
}

class Program
{
    static void Main()
    {
        Clock clock1 = new Clock();  // インスタンス化
        clock1.Hour = 6;
        clock1.Minute = 30;
        clock1.PrintTime();

        Clock clock2 = new Clock();
        clock2.Hour = 15;
        clock2.Minute = 0;
        clock2.PrintTime();
    }
}
06:30
15:00

clock1, clock2 は時計の実例であるので,Clock クラスのインスタンス (instance) あるいはオブジェクト (object) と呼ばれます。
クラスのインスタンスを生成するには,new 演算子を用いてインスタンス化を行います。

Clock クラスのメンバは,2 つのフィールド (field) と 1 つのメソッド (method)。
フィールドは Hour と Minute であり,メソッドは PrintTime です。

クラスの外部からメンバにアクセスするには,ドット演算子を用いて clock1.Hour のように書きます。
クラスの内部からメンバにアクセスするには,単に Hour と書くか this.Hour のように書きます。

アクセス修飾子

キーワード public はアクセス修飾子と呼ばれ,メンバがクラスの外部からアクセス可能なことを意味します。

同一アセンブリ他のアセンブリ
派生クラスクラス外部派生クラスクラス外部
public
private×
protected××
internal×
protected internal×

クラスのメンバには,これらすべての修飾子のいずれかが指定可能です。
アクセス修飾子を指定しないメンバは,デフォルトで private とされます。

クラスを始めとするユーザ定義型には,public または internal のいずれかが指定可能です。
アクセス修飾子を指定しないユーザ定義型は,デフォルトで internal とされます。

using System;

public class Class1
{
    public int Field1;
    private int Field2;

    public void SetField2(int value)
    {
        Field2 = value;
    }
}

internal class Program
{
    static void Main()
    {
        Class1 c = new Class1();
        c.Field1 = 5;    // 可
        c.Field2 = 5;    // 不可
        c.SetField2(5);  // 可
    }
}

フィールド

フィールドと局所変数は区別されます。

 フィールド局所変数
宣言場所クラスのメンバとして宣言メソッド等の中で宣言
宣言場所の制約変数の使用箇所より
前で宣言する必要はない
変数の使用箇所より
前で宣言する必要がある
初期化せずに
宣言したとき
既定値で初期化される
既定値
数値型0
論理型false
文字型'\0'
参照型null
未割り当てとなる

静的メンバ

静的 (static) メンバとは,クラスをインスタンス化せずに利用できるメンバのことです。

using System;

class MathTools
{
    // 静的メソッド
    public static double Abs(double a)
    {
        return a < 0 ? -a : a;
    }

    public const double PI = 3.14  // const 定数
}

class Program
{
    static void Main()
    {
        Console.WriteLine(MathTools.Abs(-5));
        Console.WriteLine(MathTools.PI);
    }
}
5
3.14159265358979

static 修飾子を付けたメンバは,静的メンバになります。
静的メンバにアクセスするには,クラス名.メンバ名 と書きます。

const 修飾子を付けたメンバは,定数かつ静的メンバになります。

読み取り専用フィールド

フィールドに readonly 修飾子を付けると,そのフィールドは読み取り専用になります。
読み取り専用フィールドへの書き込みは,コンストラクタからのみ可能です。

class Class1
{
    readonly int field1;  // 読み取り専用
    public Class1(int a) { field1 = a; }
}

const 定数との違いは,値がコンパイル時に決定するか実行時に決定するかの違いです。

スポンサーリンク