中午吃饭前,同事问了一个问题:class 前面不加public访问修饰符时的默认访问级别是什么? 当时脑海自然而然的闪过了private 级别,但是细想感觉不对,class 是在namespace之下的,如果是Private级别的话,那么别人(同名命空间下除此以外的其他class)应该也是无法访问的。同事说是internal级别,豁然发现被自己忽略的internal有点陌生,特来探究一番。

百度一下就可以很容易知道class默认的访问级别是internal.

internal 修饰符使类、接口或成员仅在当前包中可见。当前包之外的代码不能访问 internal 成员。

但是为什么我们平时写的class都是public呢? 这是因为我们的解决方案不可能只有一个项目,一般都会创建好几个项目,比如说数据访问层,Model层等,这样至少也是2个项目了,数据访问层需要访问Model层的对象,假设Model层的class为internal级别,由于每个项目都会生成自己独立的程序集,就算这2个项目的命名空间一致,数据访问层还是无法访问到Model层的class.

还有一点,如果在web项目中,比如MVC的项目中,如果将HomeController的访问级别修改为internal级别,运行起来,你会看到错误页,提示说找不到资源。

这一点说明,public级别的class是能被反射出来的,这里需要了解IIS机制,我们知道web项目是运行在Application pool中的,如此IIS才能跨进程启动应用程序池启动web。所以一般情况下class都要指定为public访问级别。

那么internal访问级别有什么用处呢?官方给出的解释如下:

内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提供 Control 和 Form 类,这两个类通过使用具有内部访问权限的成员进行合作。由于这些成员是内部的,它们不向正在使用框架的代码公开。 从定义具有内部访问能力的类型或成员的程序集外部引用该类型或成员是错误的。

参考资料:

1.internal

2.访问修饰符

首发地址:http://www.yuanxj.net/2014/01/internal/

最新文章

  1. Python脚本配合Linux计划任务工作
  2. WCF传输大数据的设置2
  3. 整合Apache+PHP教程
  4. linux crontab 文件位置和日志位置
  5. PHP 设计模式 笔记与总结(3)SPL 标准库
  6. C,C++,Lisp,Java,Perl,Python
  7. swift3.0 coredata 的使用
  8. java 枚举 类 enum
  9. 在SCVMM2012R2中删除失去联系的VM GateWay
  10. java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.L(转)
  11. 绘制数据图表的又一利器:C3.js
  12. pods的问题处理
  13. 一个简单的使用restc demo
  14. C#基础知识-编程思想之封装(七)
  15. dotweb框架之旅 [三] - 常用对象-HttpServer
  16. Android 内核常见目录的作用
  17. django-会话 cookie 中缺少HttpOnly 属性-安全加强
  18. GTK图形控件中的rc文件使用心得
  19. Spring Boot中Starter是什么
  20. Java如何查看线程的优先级?

热门文章

  1. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
  2. 使用wampserver安装Composer的注意事项
  3. Maven source jar get
  4. table 的thead th 固定 tbody滚动例子
  5. [置顶] 第二届微软CRM交流年会
  6. 王灏:光音网络致力打造Wi-Fi大生态圈
  7. Tomcat配置gzip压缩
  8. 统计中的PV,UV是的意思(转)
  9. JDK中DNS缓存的分析
  10. JS获取图片上传地址