C# 访问说明符或访问修饰符可用于定义类型及其成员的范围。通常,使用任何范围定义的类的成员始终可在类内部访问。
当超出类范围时,将适用限制。C# 支持五种访问修饰符。它们是:
- 私有的 (Private)
- 公开的 (Public)
- 内部的 (Internal)
- 受保护的 (Protected)
- 受保护的内部 (Protected Internal)。
因此,使用上述任何范围定义的类成员始终可在 C# 类内部访问。
C# 访问修饰符 情况 1:可访问的类成员
using System;
namespace CSharp_Tutorial
{
class Program
{
public void demo()
{
Console.WriteLine("public method");
}
private void demo1()
{
Console.WriteLine("private method");
}
internal void demo2()
{
Console.WriteLine("internal method");
}
protected void demo3()
{
Console.WriteLine("protected method");
}
protected internal void demo4()
{
Console.WriteLine("Protected internal method");
}
static void Main(string[] args)
{
Program c = new Program();
c.demo(); c.demo1(); c.demo2(); c.demo3(); c.demo4();
Console.ReadLine();
}
}
}

任何范围的成员都可以在类内部访问。
访问修饰符 要点。
- 声明为私有的成员只能在类内部访问。
- 类成员的默认范围是私有的。
- 我们不能声明私有类型的成员,也不能将私有应用于类。
- 类中只能使用 public 和 internal,而 protected、protected internal 和 private 不能应用于类。
- 如果我们不对类应用 public,它将成为一个内部类。
C# 访问修饰符 情况 2:使用子类访问类的成员
现在,我们在同一个命名空间 CSharp_Tutorial 中创建另一个名为 Program2 的类。
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp_Tutorial
{
class Program2:Program
{
static void Main()
{
Program2 p = new Program2();
p.demo(); p.demo2(); p.demo3(); p.demo4();
Console.ReadLine();
}
}
}

由于私有方法只能在类内部访问,我们尝试在子类中访问除私有以外的所有范围的方法。
访问修饰符 情况 3:使用同一项目中的非子类访问类的成员
现在,我们在同一个命名空间中创建另一个类 Program3,并尝试通过创建 Program3 类中 Program 类的实例来访问 Program 类的成员。
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharp_Tutorial
{
class Program3
{
static void Main()
{
Program p = new Program();
p.demo(); p.demo2(); p.demo4();
Console.ReadLine();
}
}
}
输出

在这里,我们通过在 Program3 中为 Program 创建实例来访问 Program 中的成员。
但在这里,我们观察到,由于 Program3 是 Program 的非子类,只有具有 public、internal 和 protected internal 范围的成员才能被访问。
C# 访问修饰符 情况 4:使用不同项目的子类访问类的成员
在这种情况下,具有 Public、Protected 和 Protected internal 范围的成员可以在项目外部访问。但是,具有 internal 范围的成员无法访问。
要访问 C# 类成员,可以通过将包含该成员的项目添加到要访问该成员的项目中来完成。
添加引用后,我们可以通过 继承 或创建实例来访问成员。
请记住,每个类都可以访问项目内的成员,但不能访问项目外的成员,除非将其更改为 public。这就是为什么说“类的默认范围是 internal”的原因。
访问修饰符 情况 5
使用不同项目的非子类访问 C# 类的成员。
使用不同项目的非子类只能访问具有 public 范围的成员。
也就是说,根据情况 1 中讨论的示例,在项目外部使用非子类只能访问 demo()。
