C# のカプセル化
包装は、「1つ以上のアイテムを物理的または論理的なパッケージに入れること」と定義されています。オブジェクト指向プログラミング手法では、実装の詳細へのアクセスを防ぐためにカプセル化が使用されます。
抽象化とカプセル化は、オブジェクト指向プログラミングに関連する機能です。抽象化により関連情報の視覚化が可能になり、カプセル化によりプログラマ は必要なレベルの抽象化 を達成できるようになります。
カプセル化は、アクセス修飾子を使用して実装されます。 アクセス修飾子は、クラスメンバーのスコープと可視性を定義します。 C# でサポートされているアクセス修飾子は次のとおりです。
パブリック アクセス修飾子
パブリック アクセス修飾子を使用すると、クラスがそのメンバー変数とメンバー関数を他の関数やオブジェクトに公開できるようになります。すべてのパブリック メンバーには外部クラスからアクセスできます。
次の例はこれを示しています:
using System; namespace RectangleApplication { class Rectangle { //成员变量 public double length; public double width; public double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {0}", GetArea()); } }// Rectangle 结束 class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
长度: 4.5 宽度: 3.5 面积: 15.75
上記の例では、メンバー変数の長さと幅は public として宣言されています。 Rectangle クラスのインスタンス r を使用して、関数 Main() によってアクセスできます。
メンバー関数 Display() と GetArea() は、これらの変数に直接アクセスできます。
メンバー関数 Display() も public として宣言されているため、Rectangle クラスのインスタンス r を使用して Main() によってアクセスすることもできます。
プライベート アクセス修飾子
プライベート アクセス修飾子を使用すると、クラスがそのメンバー変数とメンバー関数を他の関数やオブジェクトから隠すことができます。同じクラス内の関数のみがそのプライベート メンバーにアクセスできます。クラスのインスタンスであっても、そのプライベート メンバーにアクセスすることはできません。
次の例はこれを示しています:
using System; namespace RectangleApplication { class Rectangle { //成员变量 private double length; private double width; public void Acceptdetails() { Console.WriteLine("请输入长度:"); length = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("请输入宽度:"); width = Convert.ToDouble(Console.ReadLine()); } 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 ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.Acceptdetails(); r.Display(); Console.ReadLine(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
请输入长度: 4.4 请输入宽度: 3.3 长度: 4.4 宽度: 3.3 面积: 14.52
上記の例では、メンバー変数の長さと幅は private として宣言されています。 Main() 関数ではアクセスできません。
メンバー関数 AcceptDetails() および Display() は、これらの変数にアクセスできます。
メンバー関数AcceptDetails()とDisplay()はpublicとして宣言されているため、Rectangleクラスのインスタンスrを使用してMain()によってアクセスできます。
保護されたアクセス修飾子
保護されたアクセス修飾子を使用すると、サブクラスがその基本クラスのメンバー変数とメンバー関数にアクセスできるようになります。これは継承に役立ちます。これについては継承の章で詳しく説明します。これについてさらに詳しく話し合ってください。
内部アクセス修飾子
内部アクセス指定子を使用すると、クラスがそのメンバー変数とメンバー関数を現在のプログラム内の他の関数やオブジェクトに公開できるようになります。つまり、内部アクセス修飾子を持つ任意のメンバーには、そのメンバーが定義されているアプリケーション内で定義された任意のクラスまたはメソッドからアクセスできます。
次の例はこれを示しています:
using System; namespace RectangleApplication { class Rectangle { //成员变量 internal double length; internal double width; double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
长度: 4.5 宽度: 3.5 面积: 15.75
上記の例では、メンバー関数 GetArea() が何も指定せずに宣言されていることに注意してください。アクセス修飾子。アクセス修飾子が指定されていない場合は、クラス メンバーのデフォルトのアクセス修飾子 (private) が使用されます。
Protected Internal アクセス修飾子
Protected Internal アクセス修飾子を使用すると、クラスは、同じアプリケーション内のサブクラスの外にある他のクラス オブジェクトや関数からそのメンバー変数やメンバー関数を隠すことができます。これは継承の実装にも使用されます。