随笔分类 -  CLR FCL IL New Features

.NET底层原理 FCL IL
摘要:关于类型关于.NET中类型,在网上很多地方我们可以看到的是:值类型和引用类型两种。我也这么认为的,貌似这样认为也没有错。但本文从学术角度来说说,想到哪里就说到哪里了,各位就当是茶语饭后喝其他同事闲谈扯淡,听听就行,百家争鸣,不洗勿喷。其实还有两种,如下:简单的说一下:Value types:继承自System.ValueType的类型。Generic type parameters:带泛型参数的类型,即DebugLZQ在泛型中提到过的所谓“开类型”,其特点是在T被指定之前无法被实例化。可参考下DebugLZQ前面的这篇博文:浅谈.NET中泛型的基本原理。pointer types:指针类型,一 阅读全文
posted @ 2013-05-30 21:36 DebugLZQ 阅读(823) 评论(0) 推荐(0) 编辑
摘要:前面一篇博文:从C#5.0说起:再次总结C#异步调用方法发展史,总结了异步方法调用的发展史。关于C#2.0到5.0添加了一些什么东西,前面一篇博文中如下写到:1.0版本 - 基本C#语法。2.0版本 - 泛型的支持,CLR进行了升级,从根本上支持了运行时泛型。3.0版本 - LINQ,添加了from / join等类SQL关键字,添加了扩展函数,添加了编译期动态类型var关键字。4.0版本 - dynamic关键字,CLR进行升级,加入DLR,开始对动态进行友好的支持。同时加入动态参数、参数默认值、泛型协变等特性。5.0版本-新的异步模型,新增了async/await等关键字,简化并行计算Pa 阅读全文
posted @ 2013-04-10 21:17 DebugLZQ 阅读(470) 评论(0) 推荐(0) 编辑
摘要:C#发展至今,已经从最初的1.0到了5.0版本,其进化史如下,参考了C# 5.0 IN A NUTSHEL:让我们来回顾一下各个版本都带来了什么:1.0版本 - 基本C#语法。2.0版本 - 泛型的支持,CLR进行了升级,从根本上支持了运行时泛型。3.0版本 - LINQ,添加了from / joi... 阅读全文
posted @ 2013-04-07 23:54 DebugLZQ 阅读(4041) 评论(2) 推荐(5) 编辑
摘要:Dynamic关键字和DLR是C#4和.NET Framework 4中重大的新增功能!1.什么是“动态”?一般而言,动态语言不执行编译时类型检查,仅在运行时识别对象的类型。缺少编译时类型检查也会导致 IntelliSense 功能无效。C# 最初是作为纯静态语言创建的,但 C# 4 添加了一些动态元素,用以改进与动态语言和框架之间的互操作性。C# 团队考虑了多种设计选项,但最终确定添加一个新关键字来支持这些功能:dynamic。当我们使用 dynamic 关键字时,我们就告诉了编译器关闭编译时检查。网上以及 MSDN 文档中有大量关于如何使用该关键字的示例。2.Dynamic、Object、 阅读全文
posted @ 2013-03-25 23:23 DebugLZQ 阅读(4339) 评论(0) 推荐(2) 编辑
摘要:时间:午饭后 地点:苏州公司 主题:Entity Framework涉及的一些C#语言特性,要讲的语言特性,如下图所示 1.Extension Methods 很旧的主题了,DebugLZQ以前也有相关的博文提过。用个简单点的例子来说吧 下面的例子完成一个计算某个月剩余天数的功能,我们可以如下编码: 阅读全文
posted @ 2013-03-22 21:04 DebugLZQ 阅读(4709) 评论(0) 推荐(2) 编辑
摘要:最近很忙,因此拿出时间来写博客也算是忙里偷闲了,继承前面的一贯风格,继续浅谈胡侃。 最近在项目中遇到了Socket异步网络传输的问题,所以沉下心来整理下。于是,先问了下度娘,结果找到了园友志良的一篇文章《C#中异步和多线程的区别》(参考文献1),精读了一遍,个人觉得理解的很好,自己学习下之余,又动手加工了一下以分享给各位博友,希望各位博友能对异步和多线程有一个清楚的认识。 C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是,异步和多线程还是有一些区别的。而这些区别造成了使用异步... 阅读全文
posted @ 2012-09-05 13:05 DebugLZQ 阅读(31186) 评论(11) 推荐(8) 编辑
摘要:本片继承前面几篇一贯的特点,浅谈胡侃。 1 .NET为什么要引入泛型? 说到.NET泛型,应该都不陌生,毕竟泛型是.NET 2.0中就推出的特性,各位博友应该都知道引入泛型的最主要目的是为了解决装箱、拆箱带来的性能损失,说的当然没有错,但是不够“太具体”,确切来讲泛型解决了原先无法避免的容器操作的装箱拆箱问题。 目的就说这么多吧,言简意赅,该说的说了,多说无益。 2.浅谈.NET泛型原理 有过C++编程经验的博友对C++中的模板,一定不陌生,泛型的语法和概念和C++中的模板极其类似,在C++中模板的目的是为了设计更加通用的类型,在.NET中也是这样,当然还有另外一个重要的作用,就... 阅读全文
posted @ 2012-09-03 20:32 DebugLZQ 阅读(10928) 评论(31) 推荐(6) 编辑
摘要:谈到装箱拆箱,DebugLZQ相信给位园子里的博友一定可以娓娓道来,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱。这当然没有问题,可是你只知道这么多,那么DebugLZQ建议你花点时间看看楼主这篇文章,继续前几篇博文的风格--浅谈杂侃。 1. .NET中的类型 为了说明装箱和拆箱,那首先必须先说类型。在.NET中,我们知道System.Object类型是所有内建类型的基类。注意这里说的是内建类型,程序员可以编写不继承子自System.Object的类型,这里不做过多的介绍(感兴趣的博友可以研究一下)。 所有.NET的类型都可以分为两类(有点不严... 阅读全文
posted @ 2012-09-02 20:45 DebugLZQ 阅读(8034) 评论(16) 推荐(6) 编辑
摘要:在.NET中,由于有了垃圾回收机制的支持,对象的析构和以前C++有了很大的不同,这就要求程序员在设计类型的时候,充分理解.NET的机制,明确怎样利用Dispose方法和Finalize方法来保证一个对象正确而高效地被析构。 我们知道,在.NET环境中,托管的资源都将由.NET的垃圾回收机制来释... 阅读全文
posted @ 2012-08-28 20:11 DebugLZQ 阅读(3666) 评论(16) 推荐(6) 编辑
摘要:在.NET众多的特性中,可以说反射式.NET框架最独特的一个特性,这一点在其他框架中没有对应的概念。反射在.NET中的地位也是非常重要的,正是存在元素据等信息,才构成了.NET系统运行的基础。 需要说明的是反射在实际开发中的运用,远远没有.NET框架自身对反射的应用多,某种程度上,理解反射的原理和机制,比能够使用反射更为重要,因为能够帮助程序员更透彻的理解.NET的机制和原理。。 在.NET框架中,反射提供了一种动态分析、创建和调用的机制。在.NET框架中,一个系统可以由多个程序集组成,一个程序集可以包含多个模块,而一个模块中会有很多类型,每个类型可以包含字段和方法,方法又可以包含输入... 阅读全文
posted @ 2012-08-25 16:23 DebugLZQ 阅读(4260) 评论(5) 推荐(4) 编辑
摘要:委托、事件、反射、特性等.NET中的高级特性,对这些特性的掌握和熟练运用,往往成为.NET程序员从入门到中级的评价标准。这篇文章DebugLZQ谈一下.NET中的委托特性在.NET框架中是如何实现的,如文章题目说说:浅谈.NET中委托的本质。 委托这一特性对于有过C++编程经验的程序员来说并不陌生,C++中的函数指针和委托确实非常相似,很多人喜欢吧.NET中的委托称为“安全的函数指针”。DebugLZQ这里不去争论这种说法正不正确,但委托确实实现了和函数指针非常相似的功能,那就是程序回调指定方法的机制。 1、委托的基本原理 在委托的内部,包含了一个指向某个方法的指针,在这一点上,委托... 阅读全文
posted @ 2012-08-23 20:03 DebugLZQ 阅读(11882) 评论(15) 推荐(10) 编辑
摘要:写这篇博文为了说明如何"托管"与'"非托管"互用问题。具体来讲包括:如何在托管代码中使用非托管代码、如何在托管代码中使用非托管dll、如何在非托管代码中使用托管dll以及托管代码。直接给出最直接的描述---代码。 1.托管代码中使用非托管代码给出个可行示例,简单的说明下下面这段代码的功能--“灰度化”图像。//托管代码调用非托管代码//DebugLZQ以前写的//unsafe{}中代码为非托管代码private void pointer_Click(object sender, EventArgs e) { if (curBitmap != nu 阅读全文
posted @ 2012-08-13 20:12 DebugLZQ 阅读(1770) 评论(7) 推荐(4) 编辑
摘要:ASP.NET是微软公司提供的编写动态网站的技术框架,其特点是基于.NET框架基础,所有的ASP.NET程序都可以使用针对.NET的语言编写。在微软的VS开发平台中,实现了拖放控件等便捷的功能,使得ASP.NET应用程序的开发效率得到了较大的提高,今年来ASP.NET逐渐成为网站开发的主流技术之一。 但是ASP.NET的本质到底是什么?为了回答这个问题,下面先介绍2个概念。1.NET 宿主 作为一个致力于运行在Windows操作系统之上的技术框架,.NET的实现充分体现了这一点。.NET小组实质上把CLR实现为一个标准的COM服务器组件,CLR具有标准的COM接口和接口GUID,在安装... 阅读全文
posted @ 2012-08-11 20:16 DebugLZQ 阅读(5161) 评论(21) 推荐(4) 编辑
摘要:上篇介绍了.net中可用的定时器,本片主要介绍.net中可用的计时器。第一种方法:使用Stopwatch Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 两个静态字段可以确定实现 Stopwatch 计时的精度和分辨率。 实际上它里面就是将QueryPerformanceCounter、QueryPerformanceFrequ... 阅读全文
posted @ 2012-08-05 11:54 DebugLZQ 阅读(1974) 评论(1) 推荐(2) 编辑
摘要:.net中的计时问题可能每个人都会遇到,但是很少有人系统的总结,Baidu了下,无果,故写作本文。本文旨在总结.net中可用的各种计时方法,介绍的是DebugLZQ知道的几种.net中的定时、计时方法。并进行了我所知道的分析(重点)和简单使用,并不涉及更深层次的讨论。进入正题: 定时器是系统常用的... 阅读全文
posted @ 2012-08-05 10:55 DebugLZQ 阅读(11511) 评论(5) 推荐(3) 编辑
摘要:Windows为什么要支持线程,进程与线程的联系与区别是什么? 在计算机的早期岁月,操作系统没有提供线程概念。事实上整个系统只运行着一个执行线程,其中同时包含操作系统代码和应用程序。只用一个执行线程的问题在于,长时间运行的任务会阻止其他任务执行。例如,在16位Windows的那些日子,打印一个文档的应用程序很容易“冻结”整个机器,造成OS和其他应用程序停止响应。有的应用程序含有bug,会造成无限循环,这同样会造成整个机器停止工作。 遇到这个问题,用户只好按Reset键或电源开关重启计算机。用户们对此感到深恶痛绝(事实上,现在一样会),因为所有正在运行的应用程序都会终止。更重要的是,这些... 阅读全文
posted @ 2012-04-25 13:59 DebugLZQ 阅读(466) 评论(0) 推荐(1) 编辑
摘要:CLR 执行模型 通常为了开发一个应用程序,我们首先要选择一个开发平台,然后,我们必须决定使用哪一种编程语言。通常这是一个艰难的抉择,因为,不同的语言有不同的本事,当然前提条件是作为开发着的你能应用这种语言。因为DebugLZQ这篇文章讨论的是在.NET Framework开发平台上进行开发,在此之上选择的语言只能是面向“公共语言运行时”的语言,其中包括:C++/CLI,C#,Visual Basic,JScript,J#和一个中间语言汇编器(Intermediate Language Assembler)。除了MS,一些公司,大学也推出面向运行时的代码产品,我知道的有Ada,APL,Caml,COBOL,Eiffel,Forth,Fortran,Haskell,Lexico,LISO,LOGO,Lua,Mercury,ML,Mondrian,Oberon,Pascal,Perl,Php,Prolog,Python,RPG,Scheme,Smalltalk,和Tcl/Tk。既然如此,不同编程语言的优势何在?事实上,可以将编译器是为语法检查器和“正确代码”的分析器。 他们检查源代码,确定 阅读全文
posted @ 2011-12-14 17:34 DebugLZQ 阅读(4584) 评论(13) 推荐(6) 编辑
摘要:CLR调用方法的机制到底是什么样子的?子类方法表的构成?这篇文章以我的实际经历加以总结,给出问题的答案...关于方法槽表,从上到下依次是:继承的虚方法、虚方法、实例方法、静态方法... 关于引用类型对象的创建过程,这个很多教材里都讲的很清楚... 阅读全文
posted @ 2011-11-10 11:18 DebugLZQ 阅读(1650) 评论(3) 推荐(3) 编辑