アクセス修飾子


Access Modifier is the keyword which decide who can access resource or object in a C# program. We can control the access level of class, method , variables in a program using a access modifier.


異なった特徴を持ち、それが使用されているオブジェクト(クラス/メソッド/変数)へのアクセスのレベルを異なったものとすることができます.

パブリックアクセス修飾子
パブリックアクセス修飾子を持つオブジェクト(メソッド/プロパティ)は、プロジェクトの任意の場所からアクセスできます.パブリックアクセス修飾子のアクセシビリティ制限はありません.
using System;
namespace CSharp_Access_Modifiers
{
    class PublicMsg
    {
        // Accessible anywhere in program.
        public string msg = "This is public message."; 
    }

    class Program
    {
        static void Main()
        {
            var pMsg = new PublicMsg();
            Console.WriteLine(pMsg.msg);
        }
    }
}
Output:
This is public message.
上記のプログラムでは、msg variable publicを宣言し、別のクラスプログラムからアクセスしました.パブリックアクセスモディファイアはアクセスレベルに制限がないので、別のクラス、別のアセンブリ/名前空間からプログラムI . Eのどこからでもアクセスできます.

内部アクセス修飾子
内部アクセス修飾子を持つオブジェクトは、同じアセンブリまたは名前空間内の任意の場所からアクセスできます.
using System;
namespace CSharp_Access_Modifiers
{
    class InternalMsg
    {
        internal string msg = "This is internal message."; 
    }

    class Program
    {
        static void Main()
        {
            var interMsg = new InternalMsg();
            Console.WriteLine(interMsg.msg);
        }
    }
}
Output:
This is internal message.
上記のコードでは、内部変数MSGを宣言し、別のクラスプログラムで使用します.内部のアクセス修飾子を持つオブジェクトは、同じアセンブリ内の任意の場所でアクセスできます.

プロテクトアクセス修飾子
プロテクトアクセス修飾子は、作成したクラス内または派生クラスでオブジェクトのアクセス可能性を制限します.
using System;
namespace CSharp_Access_Modifiers
{
    class ProtectedMsg
    {
        protected string msg = "This is protected message."; 
    }

    class Program:ProtectedMsg
    {
        static void Main()
        {
            var proMsg = new Program();
            // Accessible from derived class.
            Console.WriteLine(proMsg.msg); 
        }
    }
}
Output:
This is protected message.
上記のコードでは、ProtectedMSGクラスからプログラムクラスを派生させ、MSG変数がアクセスレベルの範囲内で出力されました.
プロテクトアクセス修飾子を持つオブジェクトは、派生クラスから別のアセンブリからアクセスすることもできます.
using System;
namespace CSharp_Access_Modifiers
{
     public class ProtectedMsg
    {
        protected  string msg = "This is protected  message.";
        static void Main()
        {
        }
    }
}

// Another Assembly
using CSharp_Access_Modifiers;
using System;
namespace AnotherAssembly
{
    class Program : ProtectedMsg
    {
        static void Main()
        {
            var anotherMsg = new Program();
            Console.WriteLine(anotherMsg.msg);
        }
    }
}
Output:
This is protected  message.

プライベートアクセス修飾子
プライベートアクセス修飾子を持つオブジェクトは、同じクラスのコードでのみアクセスできます.それは、ユーザーから敏感なアイテムを隠すプログラムI . Eプロセスのカプセル化を確実にするのに用いられます.
using System;
namespace CSharp_Access_Modifiers
{
    class PrivateMsg
    {
        private string msg = "This is private message.";
        static void Main()
        {
            var prMsg = new PrivateMsg(); 
            //accessing the variable with in the class 
            Console.WriteLine(prMsg.msg);
        }
    }
}
Output:
This is private message.
プライベートアクセス修飾子は、すべての6つのアクセス修飾子の中で最低アクセスレベルを持ちます.
Cにおいて、アクセス修飾子は、保護された、そして、内部のフォームで保護された内部のアクセス修飾子を結合して、同様に個人的に保護された形個人的に保護されたアクセス修飾子を結合するように結合されることができます.

プロテクト内部アクセス修飾子
保護された内部アクセス修飾子を持つオブジェクトは、同じアセンブリ内または他のアセンブリから派生クラス内からのみアクセスできます.
using System;
namespace CSharp_Access_Modifiers
{
    public class ProtectedInternalMsg
    {
        protected internal string msg = "This is protected internal message.";
    }
}

// Another assembly 
using CSharp_Access_Modifiers;
using System;
namespace AnotherAssembly
{
    class Program : ProtectedInternalMsg
    {
        static void Main()
        {
            var anotherMsg = new Program();
            // Accessible from derived class in another assembly
            Console.WriteLine(anotherMsg.msg); 
        }
    }
}
Output:
This is protected internal message.

プライベート保護アクセス修飾子
プライベートプロテクトアクセス修飾子を持つオブジェクトは、同じクラスまたは派生クラスからのみアクセスできます.
using System;
namespace CSharp_Access_Modifiers
{
    class PrivateProtectedMsg
    {
        private protected  string msg = "This is private protected  message.";
    }

    class Program:PrivateProtectedMsg
    {
        static void Main()
        {
            var prproMsg = new Program();
            // accessible from base class or derived class only.
            Console.WriteLine(prproMsg.msg); 

        }
    }
}
Output:
This is private protected  message.
プライベートプロテクトアクセス修飾子は、同じアセンブリ内の派生クラスからオブジェクトをアクセスできます.上記のコードでは、PrivateProtectedMsgクラスから派生したプログラムクラスからMSG変数がアクセスされます.

デフォルトアクセス修飾子
アクセス修飾子がない場合、既定のアクセス修飾子が使用されます.デフォルトのアクセス修飾子は
名前空間、enum、インターフェイスの既定のアクセス修飾子はpublicで、そのアクセス修飾子は変更または設定できません.クラス、構造体、メソッド、変数の既定のアクセスレベルはprivateです.
ここでCのアクセス修飾子のアクセシビリティレベルの概要です.
アクセス修飾子
プログラム全体
基底クラス
現在のアセンブリ
別のアセンブリの派生クラス
現在のアセンブリの派生クラス
公共
はい
はい
はい
はい
はい
保護
なし
はい
なし
はい
はい
内部
なし
はい
はい
なし
はい
保護内部
なし
はい
はい
はい
はい
プライベート
なし
はい
なし
なし
なし
個人保護
なし
はい
なし
なし
はい
そのため、Cでのアクセス修飾子についてはすべてでした.