《修炼之道:.NET开发要点精讲》读书笔记(二)
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开发要点精讲》读书笔记(二)的更多相关文章
- 《CSS世界》笔记二:盒模型四大家族
上一篇:<CSS世界>笔记一:流/元素/尺寸下一篇:<CSS世界>笔记三:内联元素与对齐 写在前面 在读<CSS世界>第四章之前,粗浅的认为盒模型无非是margin ...
- CSS揭秘读书笔记 (一)
CSS揭秘读书笔记 (一) 一.半透明边框 要想实现半透明边框可以使用border: border: 10px solid hsla(0,0%,100%,.5); background: ...
- 《你必须知道的.NET》读书笔记二:小OO有大原则
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...
- spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...
- ES6读书笔记(二)
前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...
- 《精通CSS》读书笔记(一)
最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...
- spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...
- 【记】《.net之美》之读书笔记(二) C#中的泛型
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
随机推荐
- loadrunner-参数化
参数化的目的: 1.数据库或应用程序对提交请求里的参数值进行唯一性校验 2.为了避免查询缓存导致的性能测试结果失真 (语法检查-语意检查-检查缓存(有直接从数据库给)没有就生成执行计划-按照执行计划去 ...
- 断断续续Python看到现在
没有项目的支持 承认自己实践不足 但心怀梦想 我一定可以的
- pytorch 生成随机数
在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: torch.rand() torch.randn() torch.normal() torch.linespace() 在很 ...
- Django03-视图系统views
一.编写视图 一个视图函数,是一个简单的Python函数,它接受web请求,并且返回web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是 ...
- Ajax需要带头信息跨域问题的解决
$.ajax({ type:"get", url:"http://localhost:8082/index/getMsg", dataType:'json', ...
- Linux网络编程学习(七) ----- 有名管道(第四章)
1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...
- SQL Server并发操作单个表时发生在page页面级的死锁
最近遇到的死锁问题都发生在并发操作单张表上,比较有意思,就模拟了重现了一下.根据非聚集索引为条件,删除某一个表的数据,类似于这么一个语句,delete from table where noclust ...
- redis cluster介绍
讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> redis cluster,hash slot算法 一.概述 1.我们的m ...
- Nagios监控
1.Nagios监控软件 Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警 ...
- java课程之团队开发冲刺1.5
一.总结昨天进度 1.昨天由于时间较少,没有太多的时间来进行学习Sqlite 二.遇到的困难 1.由于最终的程序需要调用本地的数据库,所以我们需要在安装程序的时候就需要直接附带安装一个本地的数据库到手 ...