C#中有哪些不同类型的访问修饰符?

访问修饰符用于指定类成员的可访问性范围或类本身的类型。有六种不同类型的访问修饰符。

  • 公共的

  • 私有的

  • 受保护的

  • 内部的

  • 受保护的内部

  • 私有保护

公共访问修饰符

实现公共访问修饰符的对象可以从项目的任何位置进行访问,而没有任何限制。

示例

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Person person = new Person();
         Console.WriteLine(person.Name);
         //Person Name is accessible as it is public
      }
   }
   public class Person{
      public string Name = "Mark";
   }
}

专用访问修饰符

实现私有访问修饰符的对象只能在类或结构内部访问。结果,我们无法在创建它们的类之外访问它们。

示例

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Person person = new Person();
         Console.WriteLine(person.Name);
         //Since Name is private it is not accessible in Program class.
         // Error: Person.Name is inaccessible due to its protection level.
      }
   }
   public class Person{
      private string Name = "Mark";
   }
}

受保护的访问修饰符

protected关键字表示该对象可在该类内部以及从该类派生的所有类中访问。

示例

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Employee employee = new Employee();
         employee.Print(); //Output: Mark
         Person person = new Person();
         Console.WriteLine(person.Name);
         // Error: Person.Name is inaccessible due to its protection level.
      }
   }
   public class Person{
      protected string Name = "Mark";
   }
   public class Employee : Person{
      public void Print(){
         Console.WriteLine(Name);
      }
   }
}

内部访问修饰符

对于Internal关键字,访问仅限于当前项目程序集中定义的类。

示例

项目1 -

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Person person = new Person();
         Console.WriteLine(person.Name); //Output: Mark
      }
   }
   public class Person{
      internal string Name = "Mark";
   }
}

输出结果

Mark

项目2 -

using MyApplication;
using System;
namespace Project2{
   public class Project2Class{
      public void Print(){
         Person person = new Person();
         Console.WriteLine(person.Name);
         // Error: Person.Name is inaccessible due to its protection level.
      }
   }
}

受保护的内部访问修饰符-

受保护的内部访问修饰符是受保护的和内部的组合。结果,我们只能在同一程序集中或在其他程序集中的派生类中访问受保护的内部成员。

示例

项目1 -

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Person person = new Person();
         Console.WriteLine(person.Name); //Output: Mark
      }
   }
   public class Person{
      protected internal string Name = "Mark";
   }
}

输出结果

Mark

项目2 -

using MyApplication;
using System;
namespace Project2{
   public class Project2Class : Person{
      public void Print(){
         Console.WriteLine(Name); //Output: Mark
      }
   }
}

专用保护访问修饰符

私有受保护的访问修饰符是私有和受保护关键字的组合。我们可以访问包含类内部或派生自包含类的类中的成员,但只能访问同一程序集(项目)中的成员。因此,如果尝试从另一个程序集访问它,则会收到错误消息。此修饰符在C#7.2版和更高版本中有效。