当前位置: 首页 > article >正文

访问修饰符(C#)

访问修饰符(C#)

访问修饰符,英文:Access Modifiers

所有类型和类型成员都具有可访问性级别。 该级别可以控制是否可以从你的程序集或其他程序集中的其他代码中使用它们。 程序集是通过在单个编译中编译一个或多个 .cs 文件而创建的 .dll 或 .exe。 可以使用以下访问修饰符在进行声明时指定类型或成员的可访问性:

  • public (公共):任何程序集中的代码都可以访问此类型或成员。 包含类型的可访问性级别控制该类型的公共成员的可访问性级别。
  • private(专用):只有在同一 class 或 struct 中声明的代码才能访问此成员。
  • protected(受保护):只有同一 class 或派生的 class 中的代码才能访问此类型或成员。
  • internal(内部):只有同一程序集中的代码才能访问此类型或成员。
  • protected internal(受保护的内部):只有同一程序集中的代码或另一个程序集的派生类中的代码才能访问此类型或成员。
  • private protected(专用受保护):只有同一程序集和同一类/派生类中的代码才能访问该类型或成员。
  • file(文件):只有同一文件中的代码可以访问类型或成员。

类型上的 record 修饰符会导致编译器合成额外的成员。 record 修饰符不会影响 record class 或 record struct 的默认可访问性。

摘要

在这里插入图片描述
以下示例演示了如何在类型和成员上指定访问修饰符:

public class Bicycle
{
    public void Pedal() { }
}

并非所有访问修饰符对所有上下文中的所有类型或成员都有效。在某些情况下,包含类型的可访问性限制了其成员的可访问权限。

关于partial class:
partial class 或 partial member 的多个声明必须具有相同的可访问性。如果partial class 或 member 的一个声明不包含访问修饰符,则其他声明不能声明访问修饰符。如果partial class 或 member的多个声明声明了不同的可访问性,编译器将生成错误。

类和结构可访问性

直接在命名空间中声明的类和结构(不嵌套在其他类或结构中)可以具有公共、内部或文件访问权限。如果未指定访问修饰符,则默认为internal。
结构成员,包括嵌套类和结构,可以声明为公共、内部或私有。类成员,包括嵌套类和结构体,可以是公共的、受保护的内部的、受防护的、内部的、私有的、保护的或私有的。默认情况下,类和结构成员(包括嵌套类和结构)具有私有访问权限。
派生类的可访问性不能超过其基类型。你不能声明从内部类a派生的公共类B。如果允许,它将具有使a公开的效果,因为a的所有受保护或内部成员都可以从派生类访问。

参考:Access Modifiers (C# Programming Guide)


http://www.kler.cn/a/541459.html

相关文章:

  • Windows系统下设置Vivado默认版本:让工程文件按需打开
  • 征程 6 相比征程 5 对算子支持扩展的具体案例讲解
  • 云原生后端|实践?
  • 【系统架构设计师】体系结构文档化
  • 激活函数篇 04 —— softmax函数
  • [LVGL] 在VC_MFC中移植LVGL
  • DeepSeek接口联调(postman版)
  • 在 C++ 中使用 Protocol Buffers(protobuf)
  • ESLint 如何处理 ES6+ 语法
  • excel LOOKUP
  • Git 分布式版本控制工具使用教程
  • 第四节 docker基础之---dockerfile部署JDK
  • javaEE-11.javaScript入门
  • Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析
  • 神经网络常见激活函数 7-ELU函数
  • SOME/IP报文格式及发现协议详解
  • JUnit 5 源码结构概览
  • 基于web前端对简书页眉的开发及登陆的跳转
  • 项目6:基于大数据校园一卡通数据分析和可视化
  • 每日一题——缺失的第一个正整数
  • Open-Interface:基于大语言模型 LLM 的自动化界面操作系统
  • 前端开发中,如何判断一个元素是否在可视区域中?
  • ZND网络分析仪,一款高性能的测试与测量设备
  • 10:超级玛丽游戏
  • 利用NestJS构建高效的RESTful API接口
  • 什么是推理大模型?DeepSeek R1推理大模型与DeepSeek V3模型的区别是什么?什么时候该使用推理大模型?