1. C#とオブジェクト指向プログラミング
C#は、オブジェクト指向プログラミング言語の一つです。
オブジェクト指向とは、プログラムを「オブジェクト」と呼ばれる部品に分割し、それらを組み合わせてプログラムを作る手法です。
そして、それぞれのオブジェクトは「クラス」という設計図を元に作られます。
クラスとは、オブジェクトの設計図で、そのクラスに基づいて作られるオブジェクトを「インスタンス」と呼びます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; public class Animal { public void Eat() { Console.WriteLine("Animal eats..."); } } public class Program { public static void Main() { Animal myAnimal = new Animal(); myAnimal.Eat(); } } |
出力結果
Animal eats...
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
2. クラスとインスタンス
クラスは、オブジェクトの属性(変数)と動作(メソッド)を定義します。
例えば、「人間」を表現するクラスを作るとしたら、属性には「名前」や「年齢」、動作には「話す」「歩く」を定義できます。
そして、この「人間」クラスから「太郎」や「花子」といった具体的な人間(オブジェクト)を作ることができます。
これが「インスタンス化」と呼ばれるものです。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; public class Human { public string Name { get; set; } public void Speak() { Console.WriteLine("{0} says hello!", Name); } } public class Program { public static void Main() { Human taro = new Human() { Name = "Taro" }; taro.Speak(); Human hanako = new Human() { Name = "Hanako" }; hanako.Speak(); } } |
出力結果
Taro says hello!
Hanako says hello!
3. メソッドについて
メソッドとは、クラスが持つ動作を表します。
メソッドは、特定の処理をまとめて名前を付けたもので、そのメソッドを呼び出すことで、その処理を実行します。
例えば、「人間」クラスには「話す」や「歩く」といったメソッドがあり、それらを呼び出すことで「太郎が話す」「花子が歩く」といった動作を表現できます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; public class Human { public string Name { get; set; } public void Walk() { Console.WriteLine("{0} is walking.", Name); } } public class Program { public static void Main() { Human taro = new Human() { Name = "Taro" }; taro.Walk(); Human hanako = new Human() { Name = "Hanako" }; hanako.Walk(); } } |
出力結果
Taro is walking.
Hanako is walking.
4. コンストラクタについて
コンストラクタとは、クラスからインスタンスが生成されるときに呼び出される特殊なメソッドです。
このメソッドはインスタンスの初期化を行うために用います。
初期化とは、オブジェクトが持つ属性(変数)を初期の状態に設定することです。
例えば、「人間」クラスから「太郎」というインスタンスを作るとき、その名前を初期に「太郎」に設定するのが初期化です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; public class Human { public string Name { get; private set; } // This is the constructor public Human(string name) { Name = name; } public void Speak() { Console.WriteLine("{0} says hello!", Name); } } public class Program { public static void Main() { Human taro = new Human("Taro"); taro.Speak(); Human hanako = new Human("Hanako"); hanako.Speak(); } } |
出力結果
Taro says hello!
Hanako says hello!
5. カプセル化について
カプセル化とは、クラスの内部情報を外部から見えないようにすることです。
これにより、クラスの内部構造を意識せずに、そのクラスが提供する機能だけを使うことができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; public class Human { // Age is encapsulated. It can be accessed and changed only through the provided methods private int Age { get; set; } public void SetAge(int age) { if (age >= 0 && age <= 100) { Age = age; } else { Console.WriteLine("Invalid age"); } } public int GetAge() { return Age; } } public class Program { public static void Main() { Human taro = new Human(); taro.SetAge(30); Console.WriteLine("Taro's age: " + taro.GetAge()); } } |
出力結果
Taro's age: 30
6. 継承について
継承とは、あるクラスの属性やメソッドを別のクラスが引き継ぐことです。
これにより、既存のクラスを再利用して新たなクラスを作ることができ、コードの重複を避けることができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; public class Animal { public string Name { get; set; } public void Speak() { Console.WriteLine("{0} makes a sound", Name); } } public class Dog : Animal { public void Bark() { Console.WriteLine("{0} barks", Name); } } public class Program { public static void Main() { Dog dog = new Dog() { Name = "Rex" }; dog.Speak(); dog.Bark(); } } |
出力結果
Rex makes a sound
Rex barks
7. ポリモーフィズムについて
ポリモーフィズムとは、「多態性」とも呼ばれ、同じメソッド名で異なる動作をすることを指します。
これにより、同じインターフェースで異なる動作を表現することができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System; public class Animal { public virtual void Speak() { Console.WriteLine("The animal makes a sound"); } } public class Dog : Animal { public override void Speak() { Console.WriteLine("The dog barks"); } } public class Cat : Animal { public override void Speak() { Console.WriteLine("The cat meows"); } } public class Program { public static void Main() { Animal myDog = new Dog(); Animal myCat = new Cat(); myDog.Speak(); myCat.Speak(); } } |
出力結果
The dog barks
The cat meows
8. プロパティについて
プロパティとは、クラス内部のデータに安全にアクセスするための機能です。
これにより、直接フィールドにアクセスする代わりに、データの取得や設定を制御することができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; public class Human { private int age; public int Age { get { return age; } set { if (value > 0 && value < 120) { age = value; } else { Console.WriteLine("Invalid age"); } } } } public class Program { public static void Main() { Human taro = new Human(); taro.Age = 25; Console.WriteLine("Taro's age: " + taro.Age); } } |
出力結果
Taro's age: 25
9.インデクサについて
インデクサとは、クラスが配列のように振る舞うことを可能にする特殊なプロパティです。
これにより、クラスのインスタンスに対して、配列のようなインデックス操作を行うことができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; class SampleCollection { private int[] arr = new int[10]; public int this[int i] { get { return arr[i]; } set { arr[i] = value; } } } public class Program { public static void Main() { SampleCollection collection = new SampleCollection(); collection[0] = 10; collection[1] = 20; Console.WriteLine(collection[0]); Console.WriteLine(collection[1]); } } |
出力結果
10 20
上記のサンプルコードでは、SampleCollectionというクラスにインデクサを定義しています。
その結果、このクラスのインスタンスは配列のように扱うことができます。
まとめ
以上が、C#のクラスとオブジェクト指向の使い方についての基本的な解説です。
クラスとは、「設計図」のようなもので、それに基づいて具体的な「インスタンス」が作られます。
メソッドはクラスが持つ「行動」、コンストラクタはインスタンスが作られる時に自動的に呼び出される特殊なメソッドです。
また、カプセル化、継承、ポリモーフィズムはオブジェクト指向プログラミングの3つの柱とも呼ばれています。
最後に、プロパティを用いることで、クラスの内部データに対する安全なアクセスが可能となります。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!