C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の抽象プロパティとは?仕組みと実装例をわかりやすく解説

抽象プロパティの基本

C#において、抽象プロパティ(abstract property)として宣言されたプロパティには、アクセサー(get や set)の具体的な実装は含まれません。プロパティの存在だけを宣言し、実際の処理内容は派生クラス側で override キーワードを使って実装する仕組みです。

抽象クラスで共通の「契約」を定義しながら、各派生クラスに固有の計算やロジックを持たせたい場合に、抽象プロパティは非常に有効です。

サンプルコードの概要

ここでは、抽象クラス Shape を基盤とし、そこから派生する2つのクラス Square(正方形)と Circle(円)を作成します。それぞれのクラスで、面積を表す抽象プロパティ Area をオーバーライドして実装します。

Circle クラスの実装例

以下は、半径から面積を求める Circle クラスです。Area プロパティをオーバーライドし、「半径 × 半径 × 円周率」の計算結果を返しています。

public class Circle : Shape {
    private int radius;

    public Circle(int radius, string id) : base(id) {
        this.radius = radius;
    }

    public override double Area {
        get {
            return radius * radius * System.Math.PI;
        }
    }
}

Square クラスの実装例

同じように、一辺の長さから面積を求める Square クラスも実装できます。こちらでは「一辺 × 一辺」の計算結果を返します。

public class Square : Shape {
    private int side;

    public Square(int side, string id) : base(id) {
        this.side = side;
    }

    public override double Area {
        get {
            return side * side;
        }
    }
}

抽象クラス Shape の定義

次に示すのが、これらの基底となる抽象クラス Shape です。このクラス内で Area プロパティが abstract として宣言されており、get アクセサーの実装は持っていません。また、図形の名前を管理する Id プロパティや、情報を出力するための ToString() メソッドも定義されています。

public abstract class Shape {
    private string name;

    public Shape(string s) {
        Id = s;
    }

    public string Id {
        get {
            return name;
        }
        set {
            name = value;
        }
    }

    public abstract double Area {
        get;
    }

    public override string ToString() {
        return Id + " Area = " + string.Format("{0:F2}", Area);
    }
}

まとめ

抽象プロパティを使うことで、基底クラスは「どのようなプロパティを持つべきか」という設計上のルールだけを定義し、具体的な値の算出方法は派生クラスごとに柔軟に決められます。この例のように、同じ Area プロパティでも、円なら円周率を使った計算、正方形なら辺の掛け算といった具合に、形状に応じた実装を実現できます。

  1. C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説

    名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します

  2. C#のArrayクラスのプロパティとは?主要プロパティと使い方を解説

    C#におけるArrayクラスは、すべての配列の基底クラスであり、System名前空間で定義されています。このクラスには、配列のサイズや読み取り専用かどうか、次元数などの情報を取得するための便利なプロパティが多数用意されています。Arrayクラスの主なプロパティ一覧No.プロパティと説明1IsFixedSize配列が固定サイズであるかどうかを示す値を取得します。2IsReadOnly配列が読み取り専用であるかどうかを示す値を取得します。3Length配列のすべての次元に含まれる要素の総数を、32ビット整数(int)として取得します。4LongLength配列のすべての次元に含まれる要素の総数を、