ホームページ >バックエンド開発 >C#.Net チュートリアル >[C# チュートリアル] C# のカプセル化
C# カプセル化
カプセル化は、「1 つ以上の項目を物理的または論理的なパッケージに囲うこと」として定義されます。オブジェクト指向プログラミング手法では、実装の詳細へのアクセスを防ぐためにカプセル化が使用されます。
抽象化とカプセル化は、オブジェクト指向プログラミングに関連する機能です。抽象化により関連情報の視覚化が可能になり、カプセル化によりプログラマは必要なレベルの抽象化を達成できます。
カプセル化はアクセス修飾子を使用して実装されます。アクセス修飾子は、クラス メンバーのスコープと可視性を定義します。 C# でサポートされているアクセス修飾子は次のとおりです。
Public
Private
Protected
Internal
Protected external
パブリック アクセス修飾子
パブリック アクセス修飾子を使用すると、クラスがそのメンバー変数とメンバー関数を他の関数に公開できます。そしてオブジェクト。すべてのパブリック メンバーには外部クラスからアクセスできます。
次の例はこれを示しています:
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()); } }//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
上記の例では、メンバー変数の長さと幅はパブリックとして宣言されているため、それらは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
上記の例では、メンバー変数の長さと幅はプライベートとして宣言されているため、それらをプライベートにすることはできません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() がアクセス修飾子なしで宣言されていることに注意してください。アクセス修飾子が指定されていない場合は、クラス メンバーのデフォルトのアクセス修飾子 (プライベート) が使用されます。
保護された内部アクセス修飾子
保護された内部アクセス修飾子を使用すると、クラスは、同じアプリケーション内のサブクラスの外にある他のクラス オブジェクトや関数からそのメンバー変数やメンバー関数を隠すことができます。これは継承の実装にも使用されます。
上記は [c# チュートリアル] C# のカプセル化の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。