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

C#の抽象クラスとは?基本ルールと実装例をわかりやすく解説

抽象クラスとは

抽象クラス(abstract class)とは、「抽象メソッド」を含むことができる特別なクラスです。抽象メソッドは宣言だけが行われ、実際の処理内容(実装)は派生クラス側で記述します。この仕組みにより、派生クラスはそれぞれの目的に応じた、より専門的で具体的な機能を実装できるようになります。

以下に、C#で抽象クラスを使用する具体例を示します。

サンプルコード

ここでは、基底クラス Shape に抽象メソッド area() を定義し、派生クラス Rectangle でそれをオーバーライドして長方形の面積を計算しています。

using System;
namespace Demo {
    abstract class Shape {
        public abstract int area();
    }
    class Rectangle: Shape {
        private int length;
        private int width;
        public Rectangle( int a = 0, int b = 0) {
            length = a;
            width = b;
            Console.WriteLine("Length of Rectangle: "+length);
            Console.WriteLine("Width of Rectangle: "+width);
        }
        public override int area () {
            return (width * length);
        }
    }
    class RectangleTester {
        static void Main(string[] args) {
            Rectangle r = new Rectangle(14, 8);
            double a = r.area();
            Console.WriteLine("Area: {0}",a);
            Console.ReadKey();
        }
    }
}

実行結果

Length of Rectangle: 14
Width of Rectangle: 8
Area: 112

上記コードの中で、抽象クラスに該当する部分は次のとおりです。

abstract class Shape {
    public abstract int area();
}

抽象クラスに関する重要なルール

抽象クラスを扱う際には、以下のルールを必ず押さえておきましょう。

  • 抽象クラスのインスタンスを直接生成することはできません。
  • 抽象メソッドは、抽象クラスの外部で宣言することはできません。
  • sealed として宣言されたクラスは継承できないため、抽象クラスを sealed にすることはできません。

このように、抽象クラスは共通の設計図を提供しながら、具体的な実装を派生クラスに委ねるための強力な仕組みです。オブジェクト指向プログラミングにおいて、コードの再利用性と拡張性を高めるために活用しましょう。

  1. Pythonのメタクラスとは何か?基本概念と主な活用例をわかりやすく解説

    メタクラスとは メタクラス(metaclass)とは、クラスをインスタンスとして持つ「クラスのためのクラス」のことです。 通常のクラスがそのインスタンス(オブジェクト)の振る舞いを定義するように、メタクラスはクラスそのものの生成方法や振る舞いを定義します。イメージとしては、クラスという設計図からオブジェクトが作られるように、メタクラスというさらに上位の設計図からクラスが作られる、という関係になります。 Pythonにおけるメタクラスのサポート Pythonは言語仕様としてメタクラスをサポートしています。デフォルトのメタクラスは type であり、Python 3では次のように metaclas

  2. Pythonの基本オーバーロードメソッドとは?仕組みと使い方を実例で解説

    Pythonのクラスが持つオブジェクト指向の標準機能Pythonのクラスは、オブジェクト指向プログラミング(OOP)パラダイムに必要な標準的な機能をすべて備えています。その中核となるのがクラス継承の仕組みで、Pythonでは複数の基底クラス(親クラス)から同時に継承できる「多重継承」がサポートされています。さらに、派生クラス(子クラス)は基底クラスの任意のメソッドを自由に上書き(オーバーライド)できます。また、オーバーライドしたメソッドの中から、super()を使って同じ名前の基底クラスのメソッドを呼び出すことも可能です。メソッドオーバーライドの基本例以下は、基底クラスのメソッドを派生クラスで