中午吃饭前,同事问了一个问题: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的访问级别的更多相关文章

  1. C#中:函数访问级别对函数形参访问级别的约束

    Inconsistent accessibility: parameter type 'Program.CommandLineInfo' is less accessible than method ...

  2. 《从零开始学Swift》学习笔记(Day 29)——访问级别

    Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和 ...

  3. 一览Swift中的常用关键字

    要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  4. 谈Swift中的访问控制

    访问控制(Access Control) 访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可以指定一些代码和访问和使用的优先接口. 你可以明 ...

  5. C++中的三种继承方式

    1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? class Parent { }; class Child : public Parent ...

  6. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. The Similarities and Differences Between C# and Java -- Part 1(译)

    原文地址 目录 介绍(Introduction) 相似点(Similarities) 编译单位(Compiled Units) 命名空间(Namespaces) 顶层成员(类型)(Top Level ...

  8. swift学习笔记之-访问控制

    //访问控制 import UIKit /*访问控制(Access Control) 1.访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可 ...

  9. db2存储过程

    一. 使用存储过程的好处 1. 减少客户机与服务器之间的网络使用率,以及数据库锁定保持的时间 应用程序通常在执行每个SQL语句都要跨网络两次,存储过程可以将SQL语句集中在一起, 从而使得对于每一组S ...

随机推荐

  1. LCS算法

    转自:http://hzzy-010.blog.163.com/blog/static/79692381200872024242126/  好详细~~~也十分好理解~~~ 最长公共子序列问题(非连续的 ...

  2. hdu 4712 (随机算法)

    第一次听说随机算法,在给的n组数据间随机取两个组比较,当随机次数达到一定量时,答案就出来了. #include<stdio.h> #include<stdlib.h> #inc ...

  3. cf754D

    题意:给你一个数m,有多少优惠券,给个n,主角想用多少优惠券.然后接下来时m行,每行两个数,那张优惠券的优惠区间a,b(在a号货物到b号货物之间的所有都可以优惠) 问你,能不能用k张优惠券,是他的优惠 ...

  4. thymelef 布局 fragment

    需求:布局页面, 把首页分成四个页面: header  footer ,content ,aside ,从githua 下载的原型, 所有内容是在一起的,这里拆分, 重用, 减少代码量 做法: 新建页 ...

  5. 【转】android错误 aapt.exe已停止工作的解决方法

    http://www.jb51.net/article/57420.htm 在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示, ...

  6. 【iOS-Android开发对照】 之 APP入口

    [iOS-Android开发对照]之 APP入口 [图片 Android vs iOS] 提纲 对照分析iOS,Android的入口, iOS,Android的界面单元 为什么要有那样的生命周期 继承 ...

  7. way/XMPP

    http://git.oschina.net/way/XMPP

  8. 源泉书签,助您管理海量收藏。www.yuanquanshuqian.com,今日更新:多标签功能已实现

    源泉书签.助您管理海量收藏.www.yuanquanshuqian.com,今日更新:多标签功能已实现

  9. java 使用线程做一个简单的ATM存取款实例.(转)

    线程 Thread 类,和 Runable 接口 比较两者的特点和应用领域. 可以,直接继承线程Thread类.该方法编写简单,可以直接操作线程,适用于单重继承情况,因而不能在继承其他类 实现Runn ...

  10. mybatis0201 01复习

    mybatis是什么? mybatis是一个持久层框架,是apache下的开源项目,前身是itbatis,是一个不完全的ORM框架(因为mybatis提供输入和输出的映射,需要程序员自己写sql语句) ...