1.简述.NET中CTS、CLS以及CLR的含义与作用。

A:CTS指公共类型系统,是.NET平台中各种语言必须遵守的类型规范;CLS指公共语言规范,是.NET平台中各种语言必须遵守的语言规范;CLR指公共语言运行时,它是一个虚拟机,.NET平台中所有的托管代码均需要运行在CLR中,你可以把它看成另外一个操作系统。

2.简述.NET程序集(exe文件、dll文件)不能在无CLR环境的操作系统中运行的原因?

A:.NET程序集并不是最终可以运行在操作系统中的机器指令,它只是介于源代码和机器指令之间的一个中间件,没有CLR的存在,就不能将该中间件转换成对应操作系统中的机器指令。换句话说,.NET程序集不是传统意义上的可执行文件。

3..NET是否支持跨平台?与Java平台的区别在哪里?

A:支持,理论上讲,.NET的跨平台和Java的跨平台没有差别。

4..NET中程序集的“可执行性”与“可读性”分别指什么?

A:.NET中的程序集是一种介于源代码和机器代码之间的中间件,对于开发者来讲,可以从程序集中读取出类似元数据、IL代码或者资源数据等信息,而对于最终用户,程序集是可以在CLR中运行的。

1.“值类型对象分配在栈中,引用类型对象分配在堆中”这句话是否准确?为什么?

A:严格上讲,不太准确,值类型对象也可以被包含在引用类型对象内部,一起分配在堆中,因此不能一概而论。

2.“值类型对象的赋值就等于对象的浅复制”这句话是否正确?为什么?

A:正确。值类型对象赋值的过程就是浅复制的过程,依次将对象成员一一进行拷贝。

3.下面代码Code 3-13运行后会输出“true”,因此可以判断String是值类型,因为只有值类型判等时才比较两者所包含的内容是否一一相等,以上陈述是否正确?为什么?

//Code 3-13·66·

class Program

{

static void Main()

{

String a = new String(“123”);

String b = new String(“123”);

if(a == b)

{

Console.WriteLine(“true”);

}

else

{

Console.WriteLine(“false”);

}

}

}

A:错。String类型是一个特殊的引用类型,它的判等不同于其它引用类型去比较对象引用是否指向堆中同一实例,而是和值类型判等一致,比较对象内容是否一一相等。除此之外,String类型还是不可改变类型,对String对象的任何操作均不能改变该对象。

4.简要描述深复制与浅复制的区别。

A:对象进行浅复制时,只将对象的直接成员一一进行拷贝,当对象包含有引用类型成员时,源对象与副本之间有关联;对象进行深复制时,会将对象的所有成员(包括直接成员于间接成员)依次进行拷贝,不管对象是否包含引用类型成员,源对象与副本都无任何关联。

1.“当栈中没有引用指向堆中对象实例时,GC会对堆中实例进行内存回收”这句话是否准确?为什么?

A:不准确。因为GC不但会检查栈中的引用,还会检查堆中是否有引用。因此,只有当没有任何引用指向堆中对象实例时,GC才会考虑回收对象实例所占用的内存。

2.如果一个类型正确地实现了IDisposable接口,那么调用该类型对象的Dispose()方法后,是否意味着该对象已经死亡?为什么?

A:调用一个对象的Dispose()方法后,并不表明该对象死亡,只有GC将对象实例占用的内存回收后,才可以说对象死亡。但是通常情况下,调用对象的Dispose()方法后,由于释放了该对象的非托管资源,因此该对象几乎就处于“无用”状态,“等待死亡”是它正确的选择。

3.如果一个类型使用了非托管资源,那么释放非托管资源的最佳时机是什么时候?

A:当对象使用完毕后,就应该及时释放它的非托管资源,比如调用它的Dispose()方法(如果有),对象的非托管资源释放后,对象基本上就处于“无用”状态,因此一般不能再继续使用该对象。为了防止遗忘手动释放对象的非托管资源,我们应该在对象的析构方法中编写释放非托管资源的代码,这样一来,假如我们没有手动释放对象的非托管资源,GC也会在适当时机调用析构方法,对象的非托管资源总能正确被释放。

1.简述委托包含哪两个重要部分。

A:委托包含两个重要组成:Method和Target,分别代表委托要调用的方法和该方法所属的对象(如果为静态方法,则Target为null)。

2.怎样简单地说明委托的不可改变特性?

A:对委托的所有操作,均需要将操作后的结果在进行赋值,比如使用“+=”、“-=”将操作后的结果赋值给原委托变量。这说明对委托的操作均不能改变委托本身。

3.“事件是委托对象”是否准确?

A:准确。.NET中的事件是一种特殊的委托对象,即在定义委托对象时,在声明语句前增加了“event”关键字。事件的出现确保委托的调用只能发生在类型内部。

4.为什么说委托是.NET中的“重中之重”?

A:因为程序的运行过程就是方法的不断调用过程,而委托的作用就是“调用方法”,它不仅能够将方法作为参数传递,还能同时(同步或异步)调用多个具有相同签名的方法。

5.弱委托的关键是什么?

A:弱委托的关键是弱引用,弱委托是通过弱引用实现的。

《修炼之道:.NET开发要点精讲》读书笔记(二)的更多相关文章

  1. 《CSS世界》笔记二:盒模型四大家族

    上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...

  2. CSS揭秘读书笔记 (一)

    CSS揭秘读书笔记      (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px  solid  hsla(0,0%,100%,.5); background: ...

  3. 《你必须知道的.NET》读书笔记二:小OO有大原则

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...

  4. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...

  5. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

  6. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  7. spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...

  8. 【记】《.net之美》之读书笔记(二) C#中的泛型

    前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...

  9. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  10. how tomcat works 读书笔记(二)----------一个简单的servlet容器

    app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...

随机推荐

  1. orcal -对表的操作

    设计表 varchar2(n) number(n,m)整数:n-m,小数m DATE 日期 CLOB 大文本 BLOB二进制 创建表=============== create table membe ...

  2. mysql添加外键无法成功的原因

    最近很忙,碰到很多问题都忘了发上来做个记录,现在又忘了,FUCK,现在碰到一个问题, 就是mysql添加外键总是无法成功,我什么都试了,就是没注意signed和unsigned,FUCK,因为我用my ...

  3. 异常:Instantiation of bean failed; nested exception is java.lang.NoSuchMethodError: com.google.common.base.Preconditions.che ckState(ZLjava/lang/String;I)V

    Instantiation of bean failed; nested exception is java.lang.NoSuchMethodError: com.google.common.bas ...

  4. rsync 文件同步和备份

    rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件.在这种场景下,rsync 远比 cp 命令和 ftp 命令更加合适,它只会同步需要更新的 ...

  5. Linux查看与挂载新磁盘

    问题 把CentOS都换成了Ubuntu Server(16.04 LTS),用df -h查看磁盘占用情况,确发现之前插入的一块大容量磁盘/dev/sdb1消失了.是磁盘坏了?还是没被系统识别? 解决 ...

  6. Django中manger/QuerySet类与mysql数据库的查询

    Django中的单表操作 1.精确查询 #查询的结果返回是容器Query Set的函数(Query Set模型类)​# 1. all()   查询的所有的符合条件的结果,支持正向索引,支持索引切片,不 ...

  7. spring加载配置新旧方式对比

    老方式 1.首先要配置配置文件,如beans.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> &l ...

  8. Functional Language

    1.What is functional language? 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定 ...

  9. 9. maps

    C++有vertor,java有HashMap,C语言想使用则需要自行封装,不同的类型还需要再封装,特别麻烦. 看看Go语言的map的使用方法:var member map[string]int,创建 ...

  10. 了解一下SQL映射文件

    1:SQL映射文件 MyBatis真正强大之处就在于SQL映射语句,相对于强大的功能,SQL映射文件的配置非常简单,与JDBC相比减少了50%的代码.下面是关于SQL映射文件的几个顶级元素配置 map ...