C# の継承
継承は、オブジェクト指向プログラミングで最も重要な概念の 1 つです。継承を使用すると、別のクラスに基づいてクラスを定義できるため、アプリケーションの作成と保守が容易になります。また、コードを再利用し、開発時間を節約するのにも役立ちます。
クラスを作成するとき、プログラマは新しいデータ メンバーやメンバー関数を完全に書き直す必要はなく、新しいクラスを設計し、既存のクラスのメンバーを継承するだけで済みます。この既存のクラスは基本クラスと呼ばれ、新しいクラスは派生クラスと呼ばれます。
継承の考え方は、所属 (IS-A) 関係を実装します。例えば、哺乳類は(IS-A)動物に属し、犬は(IS-A)哺乳類に属するので、犬は(IS-A)動物に属します。
基本クラスと派生クラス
クラスは複数のクラスまたはインターフェイスから派生できます。つまり、複数の基本クラスまたはインターフェイスからデータと関数を継承できます。
C# で派生クラスを作成するための構文は次のとおりです:
<acess-specifier> class <base_class> { ... } class <derived_class> : <base_class> { ... }
基本クラス Shape があり、その派生クラスが Rectangle であると仮定します:
using System; namespace InheritanceApplication { class Shape { public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } protected int width; protected int height; } // 派生类 class Rectangle: Shape { public int getArea() { return (width * height); } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); Rect.setWidth(5); Rect.setHeight(7); // 打印对象的面积 Console.WriteLine("总面积: {0}", Rect.getArea()); Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次のコードが生成されます。結果:
总面积: 35
基本クラスの初期化
派生クラスは、基本クラスのメンバー変数とメンバー メソッドを継承します。したがって、子クラス オブジェクトを作成する前に、親クラス オブジェクトを作成する必要があります。メンバー初期化リストで親クラスを初期化できます。
次のプログラムはこれを示しています:
using System; namespace RectangleApplication { class Rectangle { // 成员变量 protected double length; protected double width; public Rectangle(double l, double w) { length = l; width = w; } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {0}", GetArea()); } }//end class Rectangle class Tabletop : Rectangle { private double cost; public Tabletop(double l, double w) : base(l, w) { } public double GetCost() { double cost; cost = GetArea() * 70; return cost; } public void Display() { base.Display(); Console.WriteLine("成本: {0}", GetCost()); } } class ExecuteRectangle { static void Main(string[] args) { Tabletop t = new Tabletop(4.5, 7.5); t.Display(); Console.ReadLine(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます:
长度: 4.5 宽度: 7.5 面积: 33.75 成本: 2362.5
C# 多重継承
C# は多重継承をサポートしません。ただし、インターフェイスを使用して多重継承を実装することはできます。次のプログラムはこれを示しています:
using System; namespace InheritanceApplication { class Shape { public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } protected int width; protected int height; } // 基类 PaintCost public interface PaintCost { int getCost(int area); } // 派生类 class Rectangle : Shape, PaintCost { public int getArea() { return (width * height); } public int getCost(int area) { return area * 70; } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // 打印对象的面积 Console.WriteLine("总面积: {0}", Rect.getArea()); Console.WriteLine("油漆总成本:总面积: 35 油漆总成本: 50" , Rect.getCost(area)); Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます:
rrreee