抽象クラスは、他のクラスの基底クラスになることだけを目的としたクラスです。 'abstract'修飾子はクラスを抽象化するために使われます。 抽象修飾子は、派生クラスに実装する必要がある、欠けている実装がいくつかあることを示します。 抽象クラスは抽象メンバーと非抽象メンバーを持つことができます。 抽象クラスは、少なくとも1つの抽象メソッドを持つ必要があります。それ以外の場合、そのクラスを「抽象」として宣言することはできません。
C#の抽象クラスの例:
抽象クラスMyCircle {abstract public int Area(); クラスMyArea:MyCircle {public override int Area(){return side * side;}} .....}}1 2 3 4 5 6 7 8 9 10 11 | 抽象クラスMyCircle {abstract public int Area(); クラスMyArea:MyCircle {public override int Area(){return side * side;}} 。 。 。 。 。 }} |
上記の例に示すように、MyCircleクラス内の抽象メソッド 'Area'は派生クラスMyAreaでオーバーライドされています。
インタフェース
インターフェースは、メソッド、プロパティ、イベントまたはインデクサーを含むメンバーの宣言のみを含みます。 これらのメンバーの実装は含まれていません。 クラスまたは構造体はインタフェースを実装し、インタフェースで宣言されたメソッドの定義を提供しなければなりません。 つまり、インタフェースは派生クラスが従う必要がある標準構造を提供します。
C#のインタフェースの例:
System.Collections.Genericを使用します。 System.Linqを使用します。 System.Textを使用します。 名前空間MyName {パブリックインタフェースMyData {void getdata();} void showdata(); }パブリッククラスNameData:MyData {public double getdata(){文字列名;} Console.WriteLine( "名前を入力してください:"); name = Console.ReadLine(); public void showdata(){Console.WriteLine( "私の名前は:"、name);} }}}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | システムを使用しています。 コレクション 一般的な システムを使用しています。 Linq; システムを使用しています。 テキスト; 名前空間MyName {パブリックインタフェースMyData {void getdata();} void showdata(); }パブリッククラスNameData:MyData {public double getdata(){文字列名;} コンソール 。 WriteLine( "名前を入力してください:"); name =コンソール 読み込まれた行 ( ) ; } public void showdata(){コンソール。 WriteLine( "私の名前は:"、name); }}} |
上の例に示されているように、インタフェースMyDataは2つのメソッド宣言getdata()とshowdata()を持っています。 このインタフェースを実装しているクラスNameDataは、MyDataインタフェースで宣言されているメソッドの定義を与えるべきです。
抽象クラスとインタフェースの違い
- 抽象クラスは、抽象メンバと非抽象メンバを持つことができます。 しかし、インターフェースでは、すべてのメンバーは暗黙的に抽象的であり、派生クラスでオーバーライドされる必要があります。
- クラスは複数のインタフェースを継承できますが、抽象クラスは1つだけです。
- 抽象クラスは、定義を持つ、または定義を持つメソッドを含むことができます。 しかし、インターフェースはメソッドシグネチャのみを含むことができます。
- 抽象クラスは完全に、部分的に、またはまったく実装されていなくてもかまいませんが、インターフェイスは完全に実装されている必要があります。つまり、すべてのメンバは派生クラスで定義されている必要があります。
- インタフェースにアクセス修飾子を含めることはできませんが、抽象クラスは関数、プロパティ、またはイベントに対してそれを持つことができます。