ホームページ > バックエンド開発 > C#.Net チュートリアル > C#学習日記21---カプセル化とアクセス修飾子

C#学習日記21---カプセル化とアクセス修飾子

黄舟
リリース: 2017-01-21 15:30:33
オリジナル
1295 人が閲覧しました

カプセル化:

ulu Cit Citri · ” ” ” ” は、「1 つ以上のプロジェクトを物理的または論理的なパッケージに含めること」として定義されます。オブジェクト指向プログラミング手法では、実装の詳細へのアクセスを防ぐためにカプセル化が使用されます。つまり、実装の詳細がまとめられているため、非常に複雑なロジックをパッケージ化した後、他の人はその実装方法を理解する必要がなく、単に渡すだけで目的の結果を得ることができます。必要なパラメータ。カプセル化はアクセス修飾子を使用して実装されます。アクセス修飾子は、クラス メンバーのスコープと可視性を定義します。修 アクセス修飾子:

クラスの分類と定義のステートメントでアクセス修飾子を簡単に紹介しましたが、ここでは public、private、protected、internal、protected external へのアクセスについて詳しく説明します。 public Modifiersパブリックアクセス修飾子により、クラスはメンバー変数とメンバー関数を他の機能とオブジェクトに公開できます。すべてのパブリック メンバーには外部クラスからアクセスできます。 (メンバーへのアクセスは制限されず、サブクラスは許可され、オブジェクトも許可されます)

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        public int Chinese=80;  
        public int Math=67;  
        public int English=45;  
         //定义一个方法  
        public int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  //实例化一个对象  
            Console.WriteLine("Chinese = {0}\nMath = {1}\nEnglish = {2}\nTotal = {3}",stu.Chinese,stu.Math,stu.English,stu.total());  
        }  
    }  
}
ログイン後にコピー

出力結果:

上記の例では、student のすべてのメンバーはパブリック型アクセス権であるため、彼のインスタンス化されたオブジェクト stu はアクセス権を持っていますメンバー全員へ。

プライベート修飾子

プライベート アクセス修飾子を使用すると、クラスがそのオブジェクトからメンバー変数とメンバー メソッドを隠すことができます。同じクラス内のメソッドのみがそのプライベート メンバーにアクセスできます。クラスのインスタンスであっても、そのプライベート メンバーにアクセスすることはできません (そのサブクラスまたはオブジェクトによるアクセスは許可されません)。

C#学習日記21---カプセル化とアクセス修飾子上記の例を使用してみましょう:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        private int Chinese=80;  
        private int Math=67;  
        public int English=45;  
  
        private int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
            int Chinese = stu.Chinese;     //出错了,不可访问(private)  
             
            int English = stu.English;   //可以访问 (public)  
  
            int total = stu.total();  // 不可访问 private 方法  
        }  
    }  
}
ログイン後にコピー

学生クラスの変数 Chinese および Math メソッド Total にはプライベート アクセス制限があるため、オブジェクト stu を介してアクセスすることはできません

protected 修飾子

サブクラスはその基本クラスのメンバー変数とメンバー関数。これは継承に役立ちます。 (オブジェクトへのアクセスを許可しない、クラス内のメソッドのアクセスを許可する、サブクラスのアクセスを許可する)

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        //定义protected 类型保护  
        protected int Chinese=80;  
        protected int Math=67;  
        protected int English=45;  
  
        protected int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher:student  //teacher 继承student类  
    {  
        static void Main(string[] args)  
        {  
            teacher teac = new teacher();   //创建子类 teacher 对象  
            //全部成功访问  
            int Chinese = teac.Chinese;      
             
            int English = teac.English;    
  
            int total = teac.total();  
              
        }  
    }  
}
ログイン後にコピー
e

内部修飾子

内部アクセス修飾子を使用すると、クラスがそのメンバー変数とメンバーメソッドを現在のプログラム集中 (現在のプロジェクト) に公開できます。 ) 他のメソッドとオブジェクト。つまり、内部アクセス修飾子を持つメンバーは、そのメンバーが定義されているアセンブリ (プロジェクト) 内で定義されているクラスまたはメソッドからアクセスできます。

内部修飾子を学習するには、まず Vs2010 を使用して複数のプロジェクトを作成し、プロジェクト間の参照メソッドを学習する必要があります:

まずプロジェクト ファイルを作成します: Test_internal

[OK] をクリックしてソリューション マネージャーを見つけます:

C#学習日記21---カプセル化とアクセス修飾子ソリューション「Test_internal」(1 プロジェクト) を右クリック --->追加--->新しいプロジェクト--->ビジュアル C#--->コンソール ; name 列に Class_internal という名前を付けます。これで 2 つのプロジェクト (アセンブリ) が作成されました


C#学習日記21---カプセル化とアクセス修飾子 実際、上で入力した名前は、定義した名前空間の名前です。コード Class_internal を開きます。は名前空間 Class_internal であり、Test_internal の名前空間は名前空間 Test_internal です。あるプロジェクトで using 名前空間を使用して別のプロジェクトのコンテンツを参照しますが、その前に、参照されるプロジェクトのパスを「参照」リストに追加する必要があります。

[参照] を右クリック ---> 参照の追加 ---> プロジェクト。 プロジェクト名リストから参照するプロジェクト名を見つけます。 ここで、「OK」をクリックすると、参照リストに Class_internal が表示されます。 Class_internal で、program.cs を開き、以下を編集します。 code

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Class_internal  
{  
    public class student  
    {  //定义2个 internal 访问类型与一个public访问类型  
        internal int Chinese=80;  
        internal int Math=70;  
        public int English=56;  
      //定义一个internal 访问类型方法  
        internal int Total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
        static void Main(string[] args)  
        {   
          
        }  
    }  
     
}
ログイン後にコピー

次に、Test_internal で次のコードを編集します。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using Class_internal;  //引用命名空间  
  
namespace Test_internal  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  //实例化一个student类型  
            int Chinese = stu.Chinese;   //出错了,internal 保护类型无法在这个项目中访问  
            int Math = stu.Math;  //出错,同上  
            int English = stu.English;  // 成功访问public保护类型  
             
        }  
    }  
}
ログイン後にコピー

Class_internal では内部アクセス タイプとパブリック アクセス タイプを使用しますが、別のプロジェクト Test_internal では、パブリック アクセス タイプのみにアクセスできます。これは内部です

保護された内部修飾子

。 (よくわかりません) つまり、protectedとinternalの性質を同時に持っており、protectedアクセスはサブクラスに限定され、Internalは他のアセンブリ(プロジェクト)へのアクセスを制限します。オーバーレイの 2 つの制限、保護された型には、継承されたサブクラスを介して別のプロジェクトにアクセスできません。

上記は C# 学習日記 21 の内容です ----カプセル化とアクセス修飾子 その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート