个性化阅读
专注于IT技术分析

C#访问修饰符

本文概述

C#访问修饰符或说明符是用于指定C#应用程序中变量和函数的可访问性或范围的关键字。

C#提供了五种类型的访问说明符。

  1. 公共的
  2. 受保护的
  3. 内部
  4. 内部保护
  5. 私人的

我们可以选择任何一种来保护我们的数据。公共不受限制,私人受最大限制。下表介绍了每种服务器的可访问性。

访问说明符描述
Public它指定访问不受限制。
Protected它指定访问仅限于包含类或派生类。
Internal它指定访问仅限于当前程序集。
protected internal它指定访问仅限于当前程序集或从包含类派生的类型。
Private它指定访问限制为包含类型。

现在,让我们创建示例来检查每个访问说明符的可访问性。


1)C#公共访问说明符

它使数据可以公开访问。它不将数据限制为已声明的块。

using System;
namespace AccessSpecifiers
{
    class PublicTest
    {
        public string name = "Shantosh Kumar";
        public void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            PublicTest publicTest = new PublicTest();
            // Accessing public variable
            Console.WriteLine("Hello " + publicTest.name);
            // Accessing public function
            publicTest.Msg("Peter Decosta");
        }
    }
}

输出:

Hello Shantosh Kumar
Hello Peter Decosta

2)C#受保护的访问说明符

它可以在该类中访问,并且范围有限。在继承的情况下,也可以在子类或子类中访问它。

using System;
namespace AccessSpecifiers
{
    class ProtectedTest
    {
        protected string name = "Shashikant";
        protected void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ProtectedTest protectedTest = new ProtectedTest();
            // Accessing protected variable
            Console.WriteLine("Hello "+ protectedTest.name);
            // Accessing protected function
            protectedTest.Msg("Swami Ayyer");
        }
    }
}

输出:

Compile time error
'ProtectedTest.name' is inaccessible due to its protection level.

例2

在这里,我们通过继承访问子类中受保护的成员。

using System;
namespace AccessSpecifiers
{
    class ProtectedTest
    {
        protected string name = "Shashikant";
        protected void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program : ProtectedTest
    {
        static void Main(string[] args)
        {
            Program program = new Program();
            // Accessing protected variable
            Console.WriteLine("Hello " + program.name);
            // Accessing protected function
            program.Msg("Swami Ayyer");
        }
    }    
}

输出:

Hello Shashikant
Hello Swami Ayyer

3)C#内部访问说明符

internal关键字用于为变量和函数指定内部访问说明符。该说明符只能在同一程序集中的文件中访问。

using System;
namespace AccessSpecifiers
{
    class InternalTest
    {
        internal string name = "Shantosh Kumar";
        internal void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            InternalTest internalTest = new InternalTest();
            // Accessing internal variable
            Console.WriteLine("Hello " + internalTest.name);
            // Accessing internal function
            internalTest.Msg("Peter Decosta");
        }
    }
}

输出:

Hello Shantosh Kumar
Hello Peter Decosta

4)受C#保护的内部访问说明符

声明为protected internal的变量或函数可以在声明了该变量或函数的程序集中进行访问。也可以在另一个程序集中的派生类中访问它。

using System;
namespace AccessSpecifiers
{
    class InternalTest
    {
        protected internal string name = "Shantosh Kumar";
        protected internal void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            InternalTest internalTest = new InternalTest();
            // Accessing protected internal variable
            Console.WriteLine("Hello " + internalTest.name);
            // Accessing protected internal function
            internalTest.Msg("Peter Decosta");
        }
    }
}

输出:

Hello Shantosh Kumar
Hello Peter Decosta

5)C#专用访问说明符

私有访问说明符用于指定变量或函数的私有访问性。它是限制性最强的,并且只能在声明它的类的主体内访问。

using System;
namespace AccessSpecifiers
{
    class PrivateTest
    {
        private string name = "Shantosh Kumar";
        private void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            PrivateTest privateTest = new PrivateTest();
            // Accessing private variable
            Console.WriteLine("Hello " + privateTest.name);
            // Accessing private function
            privateTest.Msg("Peter Decosta");
        }
    }
}

输出:

Compile time error
'PrivateTest.name' is inaccessible due to its protection level.

C#专用说明符示例2

using System;
namespace AccessSpecifiers
{
    class Program
    {
        private string name = "Shantosh Kumar";
        private void Msg(string msg)
        {
            Console.WriteLine("Hello " + msg);
        }
        static void Main(string[] args)
        {
            Program program = new Program();
            // Accessing private variable
            Console.WriteLine("Hello " + program.name);
            // Accessing private function
            program.Msg("Peter Decosta");
        }
    }
}

输出:

Hello Shantosh Kumar
Hello Peter Decosta
赞(0)
未经允许不得转载:srcmini » C#访问修饰符

评论 抢沙发

评论前必须登录!