C#中五种访问修饰符作用范围分别是怎样的

来源:网络编程作者:会飞的猪头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#中五种访问修饰符作用范围分别是怎样的》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#中五种访问修饰符作用范围分别是怎样的》有用,将其分享出去将是对创作者最好的鼓励。

C#的访问修饰符用于限定类、结构体、接口以及它们的成员的可访问范围,是面向对象编程中封装特性的重要实现方式,合理设置访问修饰符可以有效控制代码的暴露程度,减少不必要的耦合。

C#中五种访问修饰符作用范围分别是怎样的

C#五种访问修饰符基础定义

C#中共有五种访问修饰符,分别是publicprivateprotectedinternalprotected internal,每个修饰符的作用范围有明确的规定,下面逐一说明。

1. public 访问修饰符

public是最开放的访问修饰符,被它修饰的成员可以被任何程序集中的任何代码访问,没有访问限制。

// 定义一个公共类
public class PublicClass
{
    // 公共字段,任何地方都可以访问
    public string PublicField = "公共字段内容";

    // 公共方法,任何地方都可以调用
    public void PublicMethod()
    {
        Console.WriteLine("这是公共方法");
    }
}

// 另一个程序集中的类访问PublicClass
public class OtherClass
{
    public void Test()
    {
        PublicClass pc = new PublicClass();
        Console.WriteLine(pc.PublicField); // 可以正常访问
        pc.PublicMethod(); // 可以正常调用
    }
}

2. private 访问修饰符

private是最严格的访问修饰符,被它修饰的成员只能在当前类的内部访问,即使是同一个程序集中的其他类也无法访问。

public class PrivateClass
{
    // 私有字段,只能在PrivateClass内部访问
    private string PrivateField = "私有字段内容";

    // 私有方法,只能在PrivateClass内部调用
    private void PrivateMethod()
    {
        Console.WriteLine("这是私有方法");
    }

    // 类内部的公共方法可以访问私有成员
    public void AccessPrivateMember()
    {
        Console.WriteLine(PrivateField); // 内部可以访问
        PrivateMethod(); // 内部可以调用
    }
}

public class TestClass
{
    public void Test()
    {
        PrivateClass pc = new PrivateClass();
        // Console.WriteLine(pc.PrivateField); // 编译错误,无法访问私有字段
        // pc.PrivateMethod(); // 编译错误,无法调用私有方法
        pc.AccessPrivateMember(); // 可以通过公共方法间接访问
    }
}

3. protected 访问修饰符

protected修饰的成员可以在当前类内部以及当前类的派生类中访问,与当前类同程序集但无继承关系的类无法访问。

public class BaseClass
{
    // 受保护字段,基类和派生类可以访问
    protected string ProtectedField = "受保护字段内容";

    // 受保护方法,基类和派生类可以调用
    protected void ProtectedMethod()
    {
        Console.WriteLine("这是受保护方法");
    }
}

public class DerivedClass : BaseClass
{
    public void Test()
    {
        Console.WriteLine(ProtectedField); // 派生类可以访问基类的受保护字段
        ProtectedMethod(); // 派生类可以调用基类的受保护方法
    }
}

public class UnrelatedClass
{
    public void Test()
    {
        BaseClass bc = new BaseClass();
        // Console.WriteLine(bc.ProtectedField); // 编译错误,无继承关系的类无法访问
    }
}

4. internal 访问修饰符

internal修饰的成员只能在当前程序集内部访问,其他程序集的代码无法访问,不管是否有继承关系。

// 当前程序集内的类
internal class InternalClass
{
    // 内部字段,当前程序集内可以访问
    internal string InternalField = "内部字段内容";

    // 内部方法,当前程序集内可以调用
    internal void InternalMethod()
    {
        Console.WriteLine("这是内部方法");
    }
}

// 同一个程序集内的其他类
public class SameAssemblyClass
{
    public void Test()
    {
        InternalClass ic = new InternalClass();
        Console.WriteLine(ic.InternalField); // 可以正常访问
        ic.InternalMethod(); // 可以正常调用
    }
}
// 如果是其他程序集引用当前程序集,将无法访问InternalClass及其成员

5. protected internal 访问修饰符

protected internalprotectedinternal的并集,被它修饰的成员可以在当前程序集内部访问,或者在其他程序集中的派生类中访问。

public class ProtectedInternalClass
{
    // 受保护内部字段
    protected internal string ProtectedInternalField = "受保护内部字段内容";

    // 受保护内部方法
    protected internal void ProtectedInternalMethod()
    {
        Console.WriteLine("这是受保护内部方法");
    }
}

// 同一个程序集内的类
public class SameAssemblyTest
{
    public void Test()
    {
        ProtectedInternalClass pc = new ProtectedInternalClass();
        Console.WriteLine(pc.ProtectedInternalField); // 可以访问
        pc.ProtectedInternalMethod(); // 可以调用
    }
}

// 其他程序集中的派生类
public class OtherAssemblyDerivedClass : ProtectedInternalClass
{
    public void Test()
    {
        Console.WriteLine(ProtectedInternalField); // 派生类可以访问
        ProtectedInternalMethod(); // 派生类可以调用
    }
}

五种访问修饰符作用范围对比

为了更清晰地对比五种访问修饰符的作用范围,整理如下表格:

访问修饰符同一类内部同一程序集派生类同一程序集非派生类不同程序集派生类不同程序集非派生类
public可以可以可以可以可以
private可以不可以不可以不可以不可以
protected可以可以不可以可以不可以
internal可以可以可以不可以不可以
protected internal可以可以可以可以不可以

访问修饰符使用建议

在实际开发中,建议遵循最小权限原则,即成员的访问权限尽可能设置得小,不需要暴露给外部的成员就不要用public修饰。类的字段通常设置为private,通过公共的属性来暴露访问接口,这样可以在属性的get和set方法中添加额外的逻辑,比如数据校验。如果成员只需要在当前程序集内部使用,就使用internal修饰,避免被其他程序集误调用。需要被派生类重写或者访问的成员,使用protected修饰即可。

C#访问修饰符作用范围实例详解面向对象修改时间:2026-07-22 01:18:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。