CLR VIA

 标题 状态 内容

什么是CLR?

什么是托管模块?

托管模块由什么组成?

。net代码的执行过程

 

 http://www.cnblogs.com/aaa6818162/p/4726581.html

 

http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html

 

image

 

 

为了执行程序,首先必须把它的IL转换成本地CPU指令

 

第二次调用WriteLine的情况

PE文件 http://lwglucky.blog.51cto.com/1228348/283812/
 元数据的  http://www.cnblogs.com/bluewater/archive/2006/10/17/531639.html

元数据的逻辑结构类似于数据库中的表,所以被称为元数据表。元数据表有列和行,每一行都是不重复的,都有唯一的RID(表索引),RID就像是数据库表的主建。数据库有Schema,如每一列的类型,大小等,元数据也有类似的东西,他们被称为“元-元数据”,包含表中记录的大小,列的大小,偏移等。

 

.Net 托管模块与程序集的关系

  http://blog.csdn.net/kmguo/article/details/17055065
   
 

.NET概念:.NET程序编译和运行

 

 http://blog.csdn.net/yysyangyangyangshan/article/details/7306346

应用程序域(AppDomain)。可以理解成很多应用程序域都可以运行在同一个.NET的进程中,可以降低系统消耗,同时不同的域之间互相隔离,在安全性方面有保障。另外对于同一个进程内不同域之间的通信也相对简单一点

   
  • 这段代码进行了几次装箱?

public static void Main() {

Int32 v = 5; // 创建值变量

Object o = v; // 装箱

v = 123; // Changes the unboxed value to 123

Console.WriteLine(v + ", " + (Int32) o); // Displays "123, 5" ,装箱两次

}

 验证四种判等方式  

Object的静态方法ReferenceEquals

 

只适用于判断两个引用是否指向同一个实例,不适用于值类型(或者说用于值类型是没意义的,因为永远返回false)。如下:

 

 

TestEqual te = new TestEqual();

bool b1= object.ReferenceEquals(te,te);

bool b2 = object.ReferenceEquals(1, 1);

  

b1trueb2falseb2false的原因是两个整型值1装箱之后是两个不同的Object实例。

 

 

Object中定义的实例级虚方法Equals

 

 

默认行为是判断引用是否相等,引用类型从Object中继承了这一行为,如下:

 

   TestEqual te1= new TestEqual();

   TestEqual te2 = new TestEqual();

   bool b4= te1.Equals(te2);

   bool b5 = te1.Equals(te1);

   Console.WriteLine(b4);

   Console.WriteLine(b5);

 

 

输出结果很明显第一个假,第二个真。

 

但是对于值类型来说,由于ValueType重写了这个方法,所以其行为不同,可以判断值是否相同,而不是引用。

 

 

如下:

 

 

     int num1 = 15;

     int num2 = 15;

     bool b3 = num1.Equals(num2);

  Console.WriteLine(b3);

 

虽然num1num2是两个变量,但是只要它们的值一样,b3结果就为true

 

 

③ = =运算符:

 

 

应用于值类型的时候其行为是判断值是否相等。应用于引用类型(String除外)的时候判断引用是否相同。

 

 

Object中的静态方法Equals

 

 

它接受两个Object类型的参数,它会调用第一个参数的实例级Equals方法,以第二个参数作为该方法的参数来进行判等。所以其行为表现出来和实例级的Equals方法一样。只是其内部添加了对于两个参加判等的参数是否本身已经是同一个引用的判断,还有两个参数是否为null的判断。

 常量const 

http://www.cnblogs.com/janes/archive/2011/07/11/2103215.html 

常量是恒定不变的,在编译时就确定了它的值,编译后直接将值存到元数据中。变量类型只能是编译器能直接识别的基元类型,不能是引用类型,因为引用类型需要在运行时调用构造函数进行初始化。

通过ILDasm工具查看一下,const变量编译后为static literal类型,所以不难理解,常量是针对类的一部分,而不是实例的一部分

 只读字段readonly  类的数据成员通常用来保存一个值类型的实例或者指向引用类型的引用,CLR支持读写和只读两种数据成员,其中只读数据成员使用readonly修饰的
   其实很简单,C#中方法中的参数也是一个变量,这个变量也需要有一个地址。

对于引用类型的方法参数,传入的对象如果不加Ref,方法参数也就是这个变量也将被创建,不过因为是引用类型,所以地址直接指向所传入对象的地址。所以实际上是有两个变量,但都指向了同一处地址。
如果加了Ref,那么方法参数这个变量,将不被创建,也就是只有一个变量,指向了一处地址。

引用类型加不加Ref没有本质区别,只是多个了变量而已。
 

string/String类型作为参数是传值还是传址_AX

 

 class Program
    {
        static void Swap(string a, string b)
{
            string c = a;
            a = b;
            b = c;
        }
       
        static void Main(string[] args)
        {
            string str1 = "Jenny";
            string str2 = "Benny";


            Swap(str1, str2);

            Console.WriteLine(str1);
            Console.WriteLine(str2);
            Console.Read();

        }
    }

 

 

string在.net中是个特殊的对象,当把一个string传给一个方法时其实是做了一个“s=s”的操作,如果是其它对象,当然是前者得到后者的一个地址引用,而string对象每做一次赋值操作,被赋值的string都会重开一个内存空间将后者的值复制过来,所以才有了你的结果。

 

string类是引用类型,在赋值时是传址的。但如果用作函数参数的话系统会自动复制一个string类进行运算,因为函数默认是按值传递的。如果函数要传址,请在函数定义时,在参数前加上ref,在使用时也加上ref就可以了。

{
 7    class TestString
 8    {
 9        public static void Main()
10        {
11            string s = "AX";
12            Change(s);
13            Console.WriteLine(s);
14            Console.ReadLine();
15        }
16
17        private static void Change(string s)
18        {
19            s = "zhz";
20        }
21    }
22}

 C#友元程序集  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python ansys workbench联动_联合ANSYS WORKBENCH和经典界面进行后处理

WORKCENCH主要是为不大懂ANSYS命令和编程的工程师服务的,而经典界面则适用于初学者和研究人员。初学者和研究人员是完全不同的两个层次,为什么ANSYS经典界面却同时适合二者呢?实际上,学好ANSYS,关键并非是操作界面&…

jQuery表格排序总成-tablesorter

一个、进口单证<script type"text/javascript" src"js/jquery.js"></script> <script type"text/javascript" src"js/jquery.tablesorter.js"></script> <!-- 引入下面样式则表头出现排序图标。同一时候…

5渲染判断_云渲染怎么收费,5大云渲染平台实测,您选对了吗?

3DMAX云渲染平台都怎么收费&#xff1f;5大云渲染平台测试后才知道差距这么大&#xff0c;您用对了吗&#xff1f;本次共计测试了3个镜头&#xff0c;为了让大家很直观地感受各个平台渲染时间和费用上的对比&#xff0c;我整理了个表格&#xff0c;供大家自行参考和判断。若有疑…

hadoop1常见配置含义

参数 取值 备注 fs.default.nameNameNode 的URI。hdfs://主机名/dfs.hosts/dfs.hosts.exclude许可/拒绝DataNode列表。如有必要&#xff0c;用这个文件控制许可的datanode列表。dfs.replication默认&#…

Android工程的编译过程

现在很多人想对Android工程的编译和打包进行自动化&#xff0c;比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解&#xff0c;至少要知道它的每一步都做了什么&#xff0c;需要什么环境和工具&#xff0c;输入和输出是什…

activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比

# 审批流调研背景由于目前产品研发组支持的产品项目越来越多&#xff0c; 同时几乎每个项目都会有导出审批&#xff0c;流程流转等需求&#xff0c;本着提高开发效率和组件化的目的&#xff0c;调研和开发通用的工作流组件&#xff0c;为后面的项目和新的需求提供快速支持。主要…

java 后台开发关键词解释

bean类&#xff1a;是一些实体类&#xff0c;包括viewbean,databean等等。action类&#xff1a;可作为接收显示层的数据&#xff0c;连接显示层和业务逻辑实现层的控制层。model类&#xff1a;MVC中model层就是到层。在java中无特殊含义就是模块。util类&#xff1a;工具类dao:…

docker mysql关掉后启动_Docker启动mysql的坑2

正确启动mysql&#xff1a;docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD123456 -d mysql此时虽然启动成功。但是用客户端链接的时候报错连接Docker启动的mysql出现&#xff1a;ERROR 2059 (HY000): Authentication plugin caching_sha2_password cannot be …

Servlet基础知识(二)——web.xml文件的作用

http://www.cnblogs.com/yqskj/articles/2233061.html 转载于:https://www.cnblogs.com/wangerxiansheng/p/4113607.html

Spring web应用最大的败笔

第一篇 介绍下IOC DI Spring主要是业务层框架&#xff0c;现在已经发展成为一个完整JavaEE开发框架&#xff0c;它的主要特点是IoC DI和AOP等概念的融合&#xff0c;强项在面向切面AOP。推出之初因为Ioc/AOP等新设计理念值得框架设计者学习&#xff0c;现在已经成为Java世界主流…

mysql备份的后缀名_mysql备份数据库后缀名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

如何专注

专注&#xff0c;据说是在这个时代能成功的基础。 看看自己这些分类、专注得了么&#xff1f; 转载于:https://www.cnblogs.com/x3d/p/4117443.html

mysql多主单向环形_mysql多主单向--gt;环形同步_MySQL

bitsCN.com原理&#xff1a;MySQL的Replication是一种多个MySQL的数据库做主从同步的方案&#xff0c;特点是异步&#xff0c;广泛用在各种对MySQL有更高性能&#xff0c;更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster&#xff0c;但因为比较复杂&#xff…

***PHP 去除换行符

PHP在不同的系统中&#xff0c;换行是不同的 Linux&#xff1a;\n Windows&#xff1a;\r\n mac&#xff1a;\r 所以去除回车换行的方法: 1.使用php定义好的变量&#xff08;比较好的方法&#xff0c;推荐&#xff09; $str str_replace(PHP_EOL, , $str); 2.使用str_replace …

个人代码归档

http://pan.baidu.com/s/1D7Qii 密码&#xff1a;52n3转载于:https://www.cnblogs.com/vvonline/p/4121141.html

mysql current_timestamp 不自动更新_MySQL ON UPDATE CURRENT_TIMESTAMP不更新

我有一张桌子&#xff0c;看起来像这样&#xff1a;CREATE TABLE IF NOT EXISTS Hosts (id int(128) NOT NULL AUTO_INCREMENT,IP varchar(15) NOT NULL DEFAULT ,Port varchar(5) NOT NULL DEFAULT ,Password varchar(32) NOT NULL DEFAULT ,Username varchar(32) NOT NULL DE…

序列for循环语句

序列for循环语句 序列for循环语句允许重复遍历一组序列&#xff0c;而这组序列可以是任何可以重复遍历的序列&#xff0c;如由begin()和end()函数定义的STL序列。所有的标准容器都可用作这种序列&#xff0c;同时它也同样可以是std::string&#xff0c;初始化列表&#xff08;l…

mysql批量用trim限定_如何使用trim()并更新mysql中的所有行[复制]

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

C#中用WMI实现对驱动的查询

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Management; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace WMI_驱动…

01C语言的概述

一、计算机常识在学习C语言之前&#xff0c;先要了解一些计算机常识1.计算机只能识别0和1大家都知道&#xff0c;计算机要通电才能工作&#xff0c;说白了&#xff0c;它跟电视、洗衣机一样&#xff0c;都是电器。电器都有个共同的能力&#xff1a;懂得判断通电还是断电&#x…