C#はオブジェクト指向プログラミング(OOP)の強力な機能を提供する言語で、効率的で再利用性の高いコードを書くために不可欠な知識です。この章では、クラスとオブジェクト指向プログラミングの基礎について詳しく説明し、プログラムの構造化と効率化を実現する方法を学びます。
まずは、C#での「クラス」と「インスタンス」の基本的な概念を理解しましょう。
次の例を使って、クラスとインスタンスの概念を理解しましょう。
public class Car
{
public string Color;
public string Model;
public void Drive()
{
Console.WriteLine("The car is driving.");
}
}
// インスタンスの生成
Car myCar = new Car();
myCar.Color = "Red";
myCar.Model = "Sedan";
myCar.Drive();
ここで、Car
クラスは車の特徴を定義した「設計図」です。このクラスからmyCar
というインスタンスを生成し、Color
とModel
の値を設定してDrive
メソッドを呼び出しています。
プロパティは、クラスが保持するデータ(フィールド)にアクセスするための特別なメソッドです。通常、直接データにアクセスするのではなく、プロパティを介してデータを操作します。これにより、データの整合性を保ちながら、アクセス方法を制御できます。
C#ではプロパティの宣言は次のように行います。
public class Car
{
public string Color { get; set; }
public string Model { get; set; }
}
get
アクセサはプロパティの値を取得するためのメソッドで、set
アクセサは値を設定するためのメソッドです。Car myCar = new Car();
myCar.Color = "Red";
myCar.Model = "Sedan";
Console.WriteLine("Car Color: " + myCar.Color);
Console.WriteLine("Car Model: " + myCar.Model);
プロパティはデータを直接アクセスする代わりに、クラス内でカプセル化して操作する方法を提供するため、コードの保守性が向上します。
メソッドは、クラスのインスタンスが実行する動作や操作を定義します。メソッドはコードの再利用性を高め、各クラスに適切な機能を持たせるために使います。次に、Car
クラスにDrive
というメソッドを追加してみましょう。
public class Car
{
public string Color { get; set; }
public string Model { get; set; }
public void Drive()
{
Console.WriteLine(Model + " is driving.");
}
}
ここでDrive
メソッドは、車が走行中であることを示すメッセージを表示します。このメソッドはインスタンスの動作を定義し、各インスタンスは自身のプロパティに応じて動作します。
Car myCar = new Car();
myCar.Color = "Blue";
myCar.Model = "SUV";
myCar.Drive();
コンストラクタは、クラスのインスタンスが生成されるときに自動的に呼び出される特別なメソッドです。コンストラクタを使うと、インスタンス生成時に初期設定を行うことができます。
public class Car
{
public string Color { get; set; }
public string Model { get; set; }
// コンストラクタ
public Car(string color, string model)
{
Color = color;
Model = model;
}
public void Drive()
{
Console.WriteLine(Model + " is driving.");
}
}
Car
クラスのコンストラクタには、color
とmodel
の初期値を設定する引数を持たせています。これにより、インスタンス生成時にプロパティの値を指定することができます。
Car myCar = new Car("Green", "Convertible");
myCar.Drive();
カプセル化は、クラスの内部のデータや動作を外部から隠蔽するためのオブジェクト指向の概念です。C#では、データをprivate
アクセス修飾子で保護し、public
なプロパティやメソッドで操作できるようにすることで、カプセル化を実現します。
次の例では、Car
クラスのColor
プロパティをprivate
にし、GetColor
メソッドを使ってアクセスできるようにしています。
public class Car
{
private string color;
public string Model { get; set; }
public Car(string color, string model)
{
this.color = color;
Model = model;
}
public string GetColor()
{
return color;
}
}
カプセル化により、インスタンスの内部データが予期せぬ変更から保護され、プログラムの安定性が向上します。
継承は、既存のクラスを基にして新しいクラスを作成する仕組みです。これにより、コードの再利用が容易になり、特定の機能を追加した派生クラスを効率的に作成できます。
public class Vehicle
{
public int Speed { get; set; }
public void Accelerate()
{
Speed += 10;
Console.WriteLine("Speed is now " + Speed);
}
}
public class Car : Vehicle
{
public string Model { get; set; }
}
Vehicle
クラスを基にしてCar
クラスが作成されました。Car
クラスはVehicle
のプロパティとメソッドを継承しており、新たに定義しなくても使うことができます。
Car myCar = new Car();
myCar.Model = "SUV";
myCar.Accelerate();
ポリモーフィズムは、同じメソッドを異なるクラスで異なる形で実装することができるオブジェクト指向の概念です。メソッドをオーバーライドして、派生クラスで独自の動作を定義することが可能です。
public class Vehicle
{
public virtual void Drive()
{
Console.WriteLine("The vehicle is driving.");
}
}
public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine("The car is driving.");
}
}
public class Truck : Vehicle
{
public override void Drive()
{
Console.WriteLine("The truck is driving.");
}
}
ポリモーフィズムにより、Vehicle
型としてCar
やTruck
クラスのオブジェクトを扱うことができ、それぞれのクラスに応じたDrive
メソッドが実行されます。
Vehicle myCar = new Car();
Vehicle myTruck = new Truck();
myCar.Drive();
myTruck.Drive();
この章では、クラスとオブジェクト指向の基本概念を学び、クラス設計のコツとオブジェクト指向の特性を理解しました。オブジェクト指向を活用することで、保守性の高いプログラムが作れるようになります。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓