1. 简述 private、 protected、 public、 internal 修饰符的访问权限。
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。

internal: 在同一命名空间内可以访问。

2、区分internal和protected

C#中 protected internal 和 internal 的区别

 
http://kudick.blog.163.com/blog/static/1666066320091055414453/   DoDo:

protected: 奶奶有一张银行卡,妈妈可以用,女儿也可以用,隔壁老赵不可以用(因为老赵跟奶奶没有继承关系)

internal: 王总有一张银行卡,秘书可以用,经理可以用,王总儿子不可以用(因为银行卡属于公家财务,只能由公司内部人员【同一个程序集】使用,王总儿子虽然继承王总,但是他不是公司内部人员,所以也不能公款私用)

PS: 如果各个程序集使用了相同的强命名,那么internal也可以在不同的程序集下使用,就比如上面的internal例子,

王总有一张银行卡(而且还有一本存折【存折相当于强命名】),同时王总的儿子也有一本存折【一样的强命名】,那么王总的儿子也可以使用了,隔壁老王也有同样的存折【强命名】所以他也可以取钱!!

private<protected/internal<public 这个很明显了。 关键是protected和internal的问题。   protected限定的是只有在继承的子类中才可以访问,可以跨程序集           internal限定的是只有在同一个程序集中才可以访问,可以跨类    所以它们是有点交叉的。 当一个CLASS是ITERNAL的时候,要求其所有的成员的限定范围不能大于internal。 所以,当一个INTERNAL的CLASS写PROTECTED的时候,就需要两个限定符了: internal   protected 这样,限定了访问范围是:本程序集、继承的子类。 因此,关系是: private<internal   protected<internal/protected<public internal和protected的具体范围大小就不能准确的界顶了。

3、程序集:
被编译到同一个dll或exe中的程序就是处于同一个程序集中,在不同的dll或exe文件中的程序就是处于不同的程序集中。

.net中的程序集就是一个编译器直接生成的dll或可执行的exe文件,包含程序集清单、元数据和MSIL等。是一个或者多个类型定义及资源文件的集合体。

 
程序集,对于C#程序员来说一定不陌生,不就是VS生成的那些exe,dll么。是的,程序集(.net中exe与dll的区别就是exe有程序接入口,即Main函数)就是.net框架下,可以被CLR加载并运行的一堆数据集(类似java中的jar包,无法脱离虚拟机自己运行)。它们和之前C\C++生成的可执行程序和动态链接库有本质的区别。
 
说了半天,程序集里到底有什么呢。作为一堆数据集,程序集的数据可以分为:类型元数据,程序元数据,IL代码,资源。

先说下什么是元数据,元数据一般就是指描述自身的数据。

程序集元数据:包含程序集的版本信息,安全信息,签名等。

类型元数据:记录了程序集将引用了哪些类,用户自定义了哪些类,字段,数据类型等一系列信息(VS的编程助手靠的就是反射获取类型元数据)。

IL代码:MSIL,微软中间语言,微软跨语言的根基所在,所有的C#代码都编译成IL代码,保存在程序集中,在被CLR加载后,由JIT调用BCL,FTL即时编译成机器码来让CPU运行。

C#中的访问修饰符的更多相关文章

  1. php中的访问修饰符 private、protected、public的作用范围

    1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...

  2. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

  3. 分享知识-快乐自己:java 中的访问修饰符

    1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...

  4. java中的访问修饰符

    Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.其中package代表缺省的访问权限,具体到代码中就是不写任何修饰符的 ...

  5. java中抽象类与接口中方法访问修饰符问题 (

    1.抽象类中的抽象方法(其前有abstract修饰)不能用private.static.synchronized.native访问修饰符修饰.原 因如下:抽象方法没有方法体,是用来被继承的,所以不能用 ...

  6. .NET中的访问修饰符

    .NET中一共有五种访问修饰符   分别是   public                          公共的,访问权限最高的. private                         ...

  7. JAVA中的访问修饰符和包

    一.JAVA访问修饰符 访问修饰符,用来控制类中成员的可见性 有四个访问修饰符,分别是:default,private,public,protected 1.default(默认):默认权限,不用写的 ...

  8. c#中的访问修饰符Protected,privet ,public, internal,和internal protected

    Protected,privet ,public, internal,和internal protected的区别 Private修饰的,只能值类内部使用,外部不可以使用,子类不能直接访问,但可以通过 ...

  9. java中的访问修饰符详解

    主要讲述一下java中protected的修饰控制范围. 在叙述protected修饰符使用之前,先来说一下java,可以发现,开发java程序是一个时时刻刻都在编写类.开发类.定义类的过程.类里面可 ...

  10. 01.c#中的访问修饰符

    public  公开的 private 私有的,只能在当前类的内部访问 protected  受保护的,只能在当前内的内部以及该类的子类可以访问. internal    可以在同一个程序(项目)集中 ...

随机推荐

  1. Linux 的源码安装工具 CheckInstall

    Linux 的源码安装工具 CheckInstall Checkinstall 是一个能从 tar.gz 类的 https://www.ibm.com/developerworks/cn/linux/ ...

  2. 判断re模块的布尔值

    示例: #!/usr/bin/python # coding:utf-8 # Author:Guido's admirers import re import time class card(obje ...

  3. hammer.js触摸,手指缩放等许多手势操作

    使用方法: 插件描述:Hammer.js是一个开源的,轻量级的javascript库,它可以在不需要依赖其他东西的情况下识别触摸,鼠标事件. <script src="http://e ...

  4. k8s的故障切换(failover)

    当前3个节点的状态都为ready 当前node1有两个pod  node2有1个pod 现在将node1关机会有怎样的现象 ping 分布在node1节点的pod地址已经ping不通. 在node1节 ...

  5. Vue cmd命令操作

    1.安装node(安装到电脑中,不同项目不需重复安装) 安装nodejs(如果不是在C:则需要配环境变量)2.打开cmd C:创建一个文件夹(名字不要用node) 1.进入该文件夹 2.node -v ...

  6. IIS7.0添加IP地址和域名限制

    IIS7.0默认安装是没有“IP地址和域名限制”功能的,需要我们自己选择安装 1.windows系统的添加方式 控制面板--程序与功能--启用或关闭windows功能--internat inform ...

  7. PHP常用函数及其注释

    <?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...

  8. WordPress 数据库操作WPDB对象($wpdb)用法详解【转载】

    使用wordpress的时候,如果想直接使用WP里封装的数据库操作的类(wp-db.php),将wp-blog-header.php包含到代码中就可以使用了. define(‘PATH’, dirna ...

  9. centos6.5 安装stardict 出现问题 [Errno 256] No more mirrors to try

    1. 下载startdict #wget http://downloads.naulinux.ru/pub/NauLinux/6x/i386/sites/School/RPMS/stardict-3. ...

  10. 在MYSQL中插入当前时间,就象SQLSERVER的GETDATE()一样,以及对mysql中的时间日期操作。

    在看sql教程的时候,我学的是mysql,但是教程上面的一点在mysql里面是不支持的,所以就找了其他的替代的办法 sql教程上面是这样的: 通过使用类似 GETDATE() 这样的函数,DEFAUL ...