C# 访问修饰符

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();
        }
    }
}
Accessible members of the class

任何范围的成员都可以在类内部访问。

访问修饰符 要点。

  • 声明为私有的成员只能在类内部访问。
  • 类成员的默认范围是私有的。
  • 我们不能声明私有类型的成员,也不能将私有应用于类。
  • 类中只能使用 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();

        }

    }
}
C# Access Modifiers 2

由于私有方法只能在类内部访问,我们尝试在子类中访问除私有以外的所有范围的方法。

访问修饰符 情况 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();
        }
    }
}

输出

Accessing members of the class using a non-child class of the same project

在这里,我们通过在 Program3 中为 Program 创建实例来访问 Program 中的成员。

但在这里,我们观察到,由于 Program3 是 Program 的非子类,只有具有 public、internal 和 protected internal 范围的成员才能被访问。

C# 访问修饰符 情况 4:使用不同项目的子类访问类的成员

在这种情况下,具有 Public、Protected 和 Protected internal 范围的成员可以在项目外部访问。但是,具有 internal 范围的成员无法访问。

要访问 C# 类成员,可以通过将包含该成员的项目添加到要访问该成员的项目中来完成。

添加引用后,我们可以通过 继承 或创建实例来访问成员。

请记住,每个类都可以访问项目内的成员,但不能访问项目外的成员,除非将其更改为 public。这就是为什么说“类的默认范围是 internal”的原因。

访问修饰符 情况 5

使用不同项目的非子类访问 C# 类的成员。

使用不同项目的非子类只能访问具有 public 范围的成员。

也就是说,根据情况 1 中讨论的示例,在项目外部使用非子类只能访问 demo()。

Access specifiers Modifiers
分类 C#