C# クラスとオブジェクト:堅牢な OOP の基礎
C# クラスとオブジェクト:堅牢な OOP の基礎
このチュートリアルでは、実例を通じて C# におけるクラスとオブジェクトの概念を学習します。
C# はオブジェクト指向言語であり、アプリケーションをオブジェクトを中心に構造化します。OOP では、複雑な問題を再利用可能で自己完結したオブジェクトに分割して解決します。
オブジェクトを扱うには、以下のアクティビティを実行する必要があります:
- クラスを作成する
- そのクラスからオブジェクトをインスタンス化する
C# クラス
クラスはオブジェクトの設計図です。家の設計図と考えるとわかりやすいでしょう:部屋、ドア、窓、構造ルールを定義します。その設計図から建てられた実際の家がオブジェクトです。
複数の家が同じ設計図を共有できるように、多くのオブジェクトを同じクラスから作成できます。
C# でクラスを作成する
class ClassName { }
ここでは ClassName というクラスを定義しました。クラスには以下を含められます:
- フィールド – データを保持する変数
- メソッド – アクションを実行する関数
例:
class Dog {
// フィールド
string breed;
// メソッド
public void Bark() {
// 実装
}
}
上記の例では:
- Dog – クラス名
- breed – フィールド
- Bark() – メソッド
注意: C# では、クラスのメンバーにはフィールドとメソッドの両方が含まれます。
C# オブジェクト
オブジェクトはクラスのインスタンスです。たとえば、Dog クラスからブルドッグ、ジャーマンシェパード、パグといったオブジェクトを生成できます。
クラスのオブジェクトを作成する
ClassName obj = new ClassName();
ここで new がオブジェクトを作成し、obj がその名前です。例:
Dog bullDog = new Dog();
bullDog オブジェクトは、Dog で定義されたフィールドとメソッドにアクセスできるようになります。
オブジェクトを使用したクラスメンバーへのアクセス
ドット (.) 演算子でメンバーにアクセスします:
using System;
namespace ClassObject {
class Dog {
string breed;
public void Bark() {
Console.WriteLine("Bark Bark !!");
}
static void Main(string[] args) {
// Dog オブジェクトを作成
Dog bullDog = new Dog();
// 品種を設定
bullDog.breed = "Bull Dog";
Console.WriteLine(bullDog.breed);
// メソッドを呼び出し
bullDog.Bark();
Console.ReadLine();
}
}
}
出力
Bull Dog Bark Bark !!
bullDog とドット演算子を使用して breed と Bark() にアクセスしていることに注目してください。
クラスの複数オブジェクト作成
同じクラスから複数のオブジェクトをインスタンス化し、それぞれが独自のデータを保持します:
using System;
namespace ClassObject {
class Employee {
string department;
static void Main(string[] args) {
// 最初の従業員
Employee sheeran = new Employee();
sheeran.department = "Development";
Console.WriteLine("Sheeran: " + sheeran.department);
// 2 番目の従業員
Employee taylor = new Employee();
taylor.department = "Content Writing";
Console.WriteLine("Taylor: " + taylor.department);
Console.ReadLine();
}
}
}
出力
Sheeran: Development Taylor: Content Writing
各オブジェクトが独自の department 値を保持しています。
別のクラスでのオブジェクト作成
オブジェクトは他のクラスでも作成できます。例:
using System;
namespace ClassObject {
class Employee {
public string name;
public void Work(string work) {
Console.WriteLine("Work: " + work);
}
}
class EmployeeDrive {
static void Main(string[] args) {
// Employee オブジェクトを作成
Employee e1 = new Employee();
Console.WriteLine("Employee 1");
// 名前を設定
e1.name = "Gloria";
Console.WriteLine("Name: " + e1.name);
// メソッドを呼び出し
e1.Work("Coding");
Console.ReadLine();
}
}
}
出力
Employee 1 Name: Gloria Work: Coding
ここでは EmployeeDrive が Employee オブジェクトを作成しています。パブリックメンバーによりクラス間アクセスが可能です。アクセス修飾子の詳細は 公式ドキュメント を参照してください。
なぜオブジェクトとクラスが必要なのか?
クラスとオブジェクトはモジュール設計を可能にします。多数の敵が登場するゲームでは、単一の Enemy クラスで health、ammo、Shoot()、Run() を定義できます。各敵インスタンスは独自の状態を保持しながら振る舞いを共有します。
コードをオブジェクト中心にモデル化することで、複雑性を減らし、保守性を向上させ、再利用を促進します。
C言語
- C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
- C# 部分クラスと部分メソッドを理解する
- C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
- C++クラスとオブジェクト完全ガイド:オブジェクト指向プログラミングの実践
- C++フレンド関数とフレンドクラス:アクセス制御のマスター
- Pythonオブジェクト指向プログラミング完全ガイド:クラス、継承、カプセル化、ポリモーフィズム
- Javaクラスとオブジェクト:実践ガイド
- Java抽象クラスとメソッド:包括的ガイド
- Javaネストクラスとインナークラス完全ガイド:種類、例、ベストプラクティス
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査