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

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

目次

クラスの仕組み クラスの概要
  クラスからインスタンスを生成する
  静的変数と静的メソッド(クラスからインスタンスを生成しないで利用)

クラスの概要

class クラス名 {
    フィールド
    メソッド
}
  • クラスは、データ(フィールド)と処理(メソッド)を定義できます。
  • クラスは設計図や型枠のイメージです。クラスからオブジェクト(インスタンス)を生成して利用します。
    ※クラスからオブジェクト(インスタンス)を生成しないで利用することもできます。
  • 機能を他のクラスに継承させることができます。
    C# クラスの継承の仕組みとサンプル

クラスのサンプルです。

namespace test1
{
	class Animal
	{
		private string name; //変数 varは不可

		public string walk()
		{
			var str = "が歩く"; //変数 varは可
			return name + str;
		}
		public void setName(string name)
		{
			this.name = name;
		}
	}
}

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

名前空間

namespace test1

1行目は、test1というnamespace(名前空間)です。
名前空間は、名前の重複を防ぐことができます。
例としてtest1の名前空間のColorクラスと、test2の名前空間のColorクラスは別のものとして区別できます。

クラス

class Animal

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

フィールド(データ)

private string name; //変数 varは不可

5行目は、クラスの内部で宣言されている変数です。フィールドまたはメンバー変数といいます。
privateのためクラスの外部からアクセスすることができません。
アクセスの有効範囲のことをスコープと呼びます。スコープは狭いほうが影響範囲が狭まり修正しやすくなります。データ型はstringで、ここではvarは不可です。

メソッド(処理)

		public string walk()
		{
			var str = "が歩く"; //変数 varは可
			return name + str;
		}
		public void setName(string name)
		{
			this.name = name;
		}

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

7行目のstring walk()のstringは、string型の値を返すという意味です。
9行目の変数strはローカル変数です。ローカル変数の有効範囲はメソッド内のみです。ここではvarでの宣言は可能です。
10行目のreturnは、値を返します。返される値を返り値または戻り値と呼びます。
12行目のstring nameのnameは、引数です。メソッドに値を渡します。
→7行目は()になっているので引数はありません。
戻り値がない場合、戻り値の型の箇所は「void」を指定します。
14行目のthis.nameのthisは、インスタンスを指します。

 

クラスからインスタンスを生成する

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

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

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

以下は、クラスからインスタンスを生成して利用するサンプルです。
上記「クラスのサンプル」のAnimalクラスからインスタンスを生成します。

using System;
namespace test1
{
	class Test1
	{
		static void Main()
		{
			Animal a1 = new Animal();
			Animal a2 = new Animal();
			Animal a3 = new Animal();

			a1.setName("犬");
			a2.setName("猫");
			a3.setName("鳥");

			Console.WriteLine(a1.walk()); // 犬が歩く
			Console.WriteLine(a2.walk()); // 猫が歩く
			Console.WriteLine(a3.walk()); // 鳥が歩く
		}
	}
}

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

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

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

 

静的変数と静的メソッド(クラスからインスタンスを生成しないで利用)

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

using System;

namespace Project1
{
	public static class TestStatic
	{
		public static int CNT = 100;
		public static void Print()
		{
			Console.WriteLine("テスト");
		}
	}
	class Test1
	{
		static void Main()
		{
			Console.WriteLine(TestStatic.CNT);//100
			TestStatic.Print(); //テスト
		}
	}
}

5~12行目は、TestStaticというクラスです。

7行目は、変数の前にstaticがついています。
static変数やクラスフィールドや静的変数(静的フィールド)とも呼ばれます。
8行目は、メソッドの前にstaticがついています。
staticメソッドやクラスメソッドや静的メソッドとも呼ばれます。

17行目は、newでインスタンスを生成していませんがTestStaticクラスの変数を参照できます。
構文はクラス名.変数名です。
18行目もnewでインスタンスを生成していませんがClass1クラスのメソッドを実行できます。
構文はクラス名.メソッド名です。
17,18行目とも参照先にstaticが付いていない場合は、コンパイルエラーになります。

 

オブジェクトとインスタンスの使い分け

ここでは以下のように使用しています。

インスタンス クラスから実体化したもの
オブジェクト 設計工程での用語。インスタンスとニアリーイコール。

関連の記事

C# クラスの継承の仕組みとサンプル
C# メソッドのサンプル(値渡し/参照渡し他)

△上に戻る