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

C#访问修饰符学习整理

C#访问修饰符


分类

C#访问修饰符一共有五种,分别为private, internal, protected, protected internal, public
它们都可以用来修饰类中的成员,如字段,属性,方法,事件等。对于修饰class,enum,struct,嵌套类,及其各自默认修饰符的情况,我们稍后讨论,先来看类内部成员的访问范围。

访问范围

首先贴出MSDN上关于访问修饰符的访问范围限制说明。
620813-20170505154946476-654195338.png

上图中的五种访问修饰符修饰的是类的成员,假设类名为TestClass,并且这5种修饰符分别在类TestClass中以下修饰了5种方法:

class TestClass
    {
        private void Foo_Private()
        {
            
        }
        internal void Foo_Internal()
        {

        }
        protected void Foo_Protected()
        {
            
        }
        protected internal void Foo_ProtectedInternal()
        {
            
        }
        public void Foo_Public()
        {
            
        }
    }

那么访问修饰符的解释如下:

  • public : 访问无限制。
  • protected : 访问限制为包含此成员的类TestClass内部,或者TestClass派生类内部。
  • internal : 访问限制为当前程序集内。
  • protected internal : 访问限制为当前程序集,或者TestClass的派生类。
  • private : 访问限制为TestClass内部

五种方法的访问测试结果如下:
620813-20170505164138570-581450976.png
可以看出,private的访问范围最小,访问范围只限于类的内部。public的访问范围最大,无限制。internal的访问范围限制为当前程序集,在当前类内部,派生类内部,程序集内其它类内部都可以访问。protected的访问范围是当前类内部和派生类内部,无论是当前程序集还是其它程序集,只要是它的派生类,那么就可以访问。protected internal是protected和internal的并集,它们是或的关系,即符合protected或者internal的访问范围,都是protected internal的访问范围。

class, enum, struct, interface修饰符

在命名空间下,可以用于修饰class, enum, struct, interface的修饰符只有internalpublic,指定该结构的访问范围是程序集内,还是无限制。

其余的修饰符private, protected, protected internal不能用来修饰命名空间下的class, enum, struct, interface。为什么这样呢?举个例子,使用private修饰class之后,这个类对于程序集内其它类不可见,那么这个类就没有办法使用,也就毫无意义了。

class, enum, struct, interface默认修饰符

在命名空间下,class, enum, struct, interface的默认修饰符为internal,即:

internal class TestClass
{
    
}

class TestClass
{
    
}

这两种定义等价。

class, enum, struct, interface内部成员默认修饰符

先贴MSDN上关于默认修饰符的说明:
620813-20170505170343961-624456577.png
其中,enum和interface内部成员默认访问修饰符为public,而class和struct内部成员的默认访问修饰符为private。在class中,五种访问修饰符都可以使用,在struct中,由于不存在继承关系,protected和protected internal都不能使用。

嵌套类修饰符

嵌套类可以看做是类的内部成员,因此,其访问修饰符和类的字段,属性,方法一样。来看一段代码示例:

class TestClass1
    {
        public class TestClass2
        {

        }
        internal class TestClass3
        {
            
        }
        protected class TestClass4
        {
            
        }
        protected internal class TestClass5
        {
            
        }
        private class TestClass6
        {
            
        }
        class TestClass7
        {
            
        }
    }

这样定义嵌套类没有任何问题,相当于定义了类的普通成员。嵌套类的默认修饰符为private

转载于:https://www.cnblogs.com/dst5650/p/6813364.html

相关文章:

  • 5.5下午
  • 『ORACLE』 创建表(11g)
  • javascript基础 方法
  • Objective-C语言精华概要
  • 【计划】2017年5月计划
  • Coder-Strike 2014 - Round 2
  • 线程的状态
  • jquery 实现考试倒计时
  • Android知识点textview加横线的属性
  • 配置链路聚合(端口聚合)
  • ELK常用API使用方法
  • oracle表空间增长异常或表空间占用过高问题分析
  • 大前端推荐使用的前端开发工具
  • 5.求单链表中节点的个数
  • 第九天
  • hexo+github搭建个人博客
  • [case10]使用RSQL实现端到端的动态查询
  • 【Amaple教程】5. 插件
  • CSS实用技巧
  • extjs4学习之配置
  • Java 内存分配及垃圾回收机制初探
  • laravel with 查询列表限制条数
  • Linux CTF 逆向入门
  • nfs客户端进程变D,延伸linux的lock
  • PHP变量
  • Python 反序列化安全问题(二)
  • ubuntu 下nginx安装 并支持https协议
  • Vue.js-Day01
  • vue学习系列(二)vue-cli
  • windows下如何用phpstorm同步测试服务器
  • 程序员最讨厌的9句话,你可有补充?
  • - 概述 - 《设计模式(极简c++版)》
  • 让你的分享飞起来——极光推出社会化分享组件
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 主流的CSS水平和垂直居中技术大全
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • (Java数据结构)ArrayList
  • (libusb) usb口自动刷新
  • (solr系列:一)使用tomcat部署solr服务
  • (超详细)语音信号处理之特征提取
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十三)Flask之高频面试点
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读30/100)Convolutional Pose Machines
  • .net 设置默认首页
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .Net中的集合