C#中class的访问级别
中午吃饭前,同事问了一个问题: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/
C#中class的访问级别的更多相关文章
- C#中:函数访问级别对函数形参访问级别的约束
Inconsistent accessibility: parameter type 'Program.CommandLineInfo' is less accessible than method ...
- 《从零开始学Swift》学习笔记(Day 29)——访问级别
Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和 ...
- 一览Swift中的常用关键字
要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...
- 谈Swift中的访问控制
访问控制(Access Control) 访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可以指定一些代码和访问和使用的优先接口. 你可以明 ...
- C++中的三种继承方式
1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? class Parent { }; class Child : public Parent ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- The Similarities and Differences Between C# and Java -- Part 1(译)
原文地址 目录 介绍(Introduction) 相似点(Similarities) 编译单位(Compiled Units) 命名空间(Namespaces) 顶层成员(类型)(Top Level ...
- swift学习笔记之-访问控制
//访问控制 import UIKit /*访问控制(Access Control) 1.访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可 ...
- db2存储过程
一. 使用存储过程的好处 1. 减少客户机与服务器之间的网络使用率,以及数据库锁定保持的时间 应用程序通常在执行每个SQL语句都要跨网络两次,存储过程可以将SQL语句集中在一起, 从而使得对于每一组S ...
随机推荐
- GRUB损坏后,如何修复windows启动mbr
今天使用Ghost装系统遇到windows7不能启动的问题,采用下面帖子中的部分命令搞定之. 我自己是直接使用: 插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键, ...
- xls 和 xml 数据 排序 绑定 -原创
xls 和 xml 排序 xml: <?xml version="1.0" encoding="UTF-8"?> <?xml-styleshe ...
- 用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例
.gitconfig文件: [user] name = hzh email = @qq.com [core] editor = vi quotepath = false [merge] tool = ...
- Android4.0 以后不允许在主线程进行网络连接
Android4.0 以后不允许在主线程进行网络连接,否则会出现 android.os.NetworkOnMainThreadException.因此,必须另起一个线程进行网络连接方面的操作. pac ...
- Linux 上不可修改的文件和目录
有时候我们需要让一个我们自己的目录中的内容不能变动,也就是不允许其他人随便删改我们的目录和目录中的文件.这里,首先,我们需要知道两个概念,文件的粘滞位和属性. 文件如果设置了粘滞 ...
- 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较
首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...
- Linux文件查找命令find用法整理(locate/find)
Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...
- codeforces 148D Bag of mice(概率dp)
题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完 ...
- jquery刷新iframe页面的方法
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当 ...
- HDU-1009(简单贪心)
FatMouse' Trade Problem Description FatMouse prepared M pounds of cat food, ready to trade with the ...