随笔分类 - 【001】.NET Framework
.NET基础技术,.NET Framework, .NET Core
摘要:最近在分析现在团队的项目代码(基于.NET Framework 4.5),经常发现一个CallContext的调用,记得多年前的时候用到了它,但是印象已经不深刻了,于是现在来复习一下。 1 CallContext是个啥? 如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式。但是
阅读全文
摘要:
本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结,并对各个步骤的记录,以便将来回顾。实现插件机制的原理很简单:一:定义插件接口;二:实现插件接口并建立不同工项目,使其在生成时生成不同的DLL;三:主程序运行时根据接口名利用反射对插件目录的DLL进行加载,加载完成后便可以使用插件接口定义的方法或属性;
阅读全文
摘要:CLR最终执行的只有本地的Native Code,所以JIT编译的作用在运行时将IL代码解析为机器码执行。首先,IL是基于栈执行的,执行方法调用时,方法参数、局部变量还有返回值等被分配在栈上,并执行其调用过程,既然是关注JIT编译,我们自然来关注一下方法的执行,因为JIT编译时以执行方法调用而触发的。
阅读全文
摘要:Dapper是一个开源轻的量级的ORM,只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。PetaPoco是一款适用于.NET应用程序的轻型对象关系映射器。与那些功能完备的ORM(如NHibernate或Entity Framework)不同的是,PetaPoco更注重易用性和性能,而非丰富的功能。
阅读全文
摘要:从项目的实践中我们可以发现很多人将目光和焦点集中在如何理解IL代码这个问题之上,我们的思路慢慢地从应用向底层发生着转变,技巧性的东西是一个方面的积累,底层的探索也是必不可少的修炼。了解和认识IL代码,对于我们更深刻地理解.NET和.NET应用之上的本质大有裨益,这里就跟随《你必须知道的.NET》从一个简单的Hello World初步了解一下IL代码。
阅读全文
摘要:Web Service是一种网络服务,通过通用的规范,Web Service技术允许使用者访问网络上每一个Web Service所提供的服务。在网络快速发展的时代,这种基于网络的分布式服务已经被广泛地应用。虽然如今轻量级的Restful服务正如日中天,但是了解Web Service也是基础中的基础。
阅读全文
摘要:实际开发中,我们所开发的大部分应用系统都会和数据库打交道。数据库应用设计往往成为系统设计中最重要的组成之一,这其中不止包括数据库的架构、库结构的设计,也包括了程序访问数据库策略的设计。在.NET开发中,ADO.NET已经成为访问数据库最主要的组件框架,EF一类的ORM也是基于ADO.NET做的高层实现。本篇将覆盖一些ADO.NET基本概念、数据库的连接以及数据库读写等基础知识。
阅读全文
摘要:多线程开发技术是每个技术框架下都需要面对的问题,在多CPU、多核的硬件架构逐渐普及的今天,多线程开发编程也渐渐地变得更加重要。本篇将涉及关于.NET中多线程开发中的重要基础知识点,并以问答的形式集中展现。由于各个操作系统的不同涉及,进程、线程等基本概念在不同的操作系统中会有所不同,本篇如没有特指都只代表Microsoft的Windows系列操作系统。
阅读全文
摘要:本篇涵盖了.NET框架中最为重要的几个高级特性:委托、事件、反射以及特性。对这些高级特性的理解和运用,已经成为了.NET程序员从入门进阶到中级的判断标准。也正是如此,此类的问题在各种公司的.NET技术面试中被大量采用,我们在理解这些内容时应该做到“知其然也知其所以然”,充分理解这些高级特性在.NET框架下是如何实现的,它如何提高了程序的灵活性和可扩展性。
阅读全文
摘要:字符串、集合和流在实际开发中是经常被用到,相关代码的编写也将会直接影响到系统的正确性和效率。因此,在本篇中覆盖了.NET面试笔试中关于字符串、集合和流的一些面试题,通过分析和理解这些题目和知识点,我们可以加深对字符串、集合和流的认知,从而达到梳理基础的目的,最终帮助我们在实际开发中提高效率和性能。
阅读全文
摘要:在本篇中,覆盖了.NET面试笔试中部分有关面向对象的实现和异常处理部分的题目,C#是一种“纯净”的面向对象语言,虽然.NET本身允许一些面向过程的语言组件的存在,但其提倡的仍然是面向对象的编程思想。此外,异常不是Bug,它存在于所有的程序之中,因此编写代码时,如何处理异常程序也是时刻考虑的一个问题。
阅读全文
摘要:在本篇中,覆盖了.NET面试笔试中最基础的语法和类型题目。纵观对.NET基础知识的考察中,最基础的知识点其难度也相对最小。对于这类基础知识的回答,我们需要做到尽可能的正确,当然如果对于基本概念非常清晰透彻,也能显示我们深厚的技术功底。
阅读全文
摘要:当一个发布的.NET应用程序出现app crash,无法通过日志分析异常原因时,就需要通过分析DMP文件了,传统方式是通过WinDbg来分析DMP文件,但是WinDbg用起来不是很方便,其实VS就是一个很好的DMP文件分析工具,这里我们通过一个简单的控制台项目来分析一个DMP文件。
阅读全文
摘要:(1)通过选择以XML方式打开edmx文件,我们可以可以清楚地看到,edmx模型文件本质就是一个XML文件;(2)可以清楚地看到,edmx模型文件是一个XML文件,其中定义了三大组成部分,这三大组成部分构成了所谓的ORM(对象关系映射);(3)再通过解决方案管理器分析edmx模型文件,其包含了三个子文件:①第一个是xxx.Context.tt,这个首先是一个T4的模板文件,它生成了我们这个模型的上下文类;②第二个是设计器部分,它定义了模型关系图的元数据,比如每个类图的宽度多少,在图中的坐标(X、Y轴)等;③第三个就是数据库表中所对应的实体类对象,它也是一个T4模板文件,对应了所有选择的数据库表:
阅读全文
摘要:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ。标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作。因此,需要我们予以关注起来!
阅读全文
摘要:在上一篇中,我们了解了匿名类、匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式。为了方便码农们,.Net基类库针对实际开发中最常用的情形提供了几个预定义好的委托,这些委托可以直接使用,无需再重头定义一个自己的委托类型。预定义委托在.Net基类库中使用的比较广泛,比如在Lambda表达式和并行计算中都大量地使用,需要我们予以关注起来!
阅读全文
摘要:在上一篇中,我们了解了自动属性、隐式类型、自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类、匿名方法以及常用的扩展方法。虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙。所以,跟着本篇的步伐,继续来围观。
阅读全文
摘要:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量。但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法。
阅读全文
摘要:本文题目来源于互联网,仅供即将从学校毕业的.Net码农(当然,我本人也是菜逼一个)学习之用。当然,学习了这些题目不一定会拿到offer,但是针对就业求职做些针对性的准备也是不错的。此外,除了技术上的准备外,要想得到提升,还得深入内部原理,阅读一些经典书籍(例如Jeffrey Richter的《CLR via C#》)以及借助Reflector或ILSpy反编译查看源码实现,知其然也知其所以然,方能得到感性认识到理性认识的飞跃!另外,本来想将本文标题取为就业求职宝典,但一想这名字太LOW了,而且太过浮华了,本文也根本达不到那个目标,于是将其改为储备,简洁明了。
阅读全文
摘要:本文会阐述六个重要的概念:堆、栈、值类型、引用类型、装箱和拆箱。本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:堆和栈。之后,我们会探讨一下值类型和引用类型,并对有关于这两种类型的重要基础内容做一个讲解。本文会通过一个简单的代码来展示在装箱和拆箱过程中所带来的性能上的影响,请各位仔细阅读。
阅读全文