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

csharpserver side programmingprogramming更新于 2025/9/9 10:37:17

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

  • Public

  • Private

  • Protected

  • Internal

  • Protected Internal

  • Private Protected

Public 访问修饰符

实现了 public 访问修饰符的对象可以在项目中的任何位置访问,没有任何限制。

示例

using System;
namespace MyApplication{
   public class Program{
      public static void Main(){
         Person person = new Person();
         Console.WriteLine(person.Name);
          // Person Name 是公共的,因此可以访问
      }
   }
   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);
          //由于 Name 是私有的,因此在 Program 类中无法访问。
         // 错误:由于保护级别,Person.Name 无法访问。
      }
   }
   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(); //输出:Mark
         Person person = new Person();
         Console.WriteLine(person.Name);
          // 错误:由于 Person.Name 的保护级别,无法访问。
      }
   }
   public class Person{
      protected string Name = "Mark";
   }
   public class Employee : Person{
      public void Print(){
         Console.WriteLine(Name);
      }
   }
}

Internal 访问修饰符

对于 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);
         // 错误:由于 Person.Name 的保护级别,无法访问。
      }
   }
}

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

受保护的内部访问修饰符是 protected 和 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{
      protected internal string Name = "Mark";
   }
}

输出

Mark

Project 2 −

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

Private Protected 访问修饰符

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


相关文章