随笔 - 410
文章 - 0
评论 - 519
阅读 -
148万
随笔分类 - C#基础
读<<CLR via C#>>总结(3) 值类型和引用类型的区别
摘要:下面是FCL中值类型和引用类型的区别,用表格总结如下:值类型引用类型内存分配线程栈托管堆垃圾回收不考虑考虑表示形式未装箱和已装箱总是已装箱是否可以作为基类不能作为基类,不能有虚方法可以作为基类,也能有虚方法初始化的值0Null复制逐字段复制(深拷贝)只复制内存地址(浅拷贝)操作时影响只影响当前对象,不会影响另一个对象这个引用所对应的所有对象 下面是一个实际的例子详细说明了值类型和引用类型在内存中的布局,代码如下: namespace ValueTypeDemo1{ //值类型 struct SomeVal { public int x; } ...
阅读全文
读<<CLR via C#>>总结(2) 对象创建的原理和两种类型转换方法
摘要:一,对象创建的原理 CLR要求所有的对象都用new操作符来创建,如下代码:namespace NewobjectDemo1{ class Employee { private string Name; //构造函数 public Employee(string name) { Name = name; } } class Program { static void Main(string[] args) { Employe...
阅读全文
读<<CLR via C#>>总结(1) dotNet平台下源代码是如何生成应用程序的
摘要:CLR(Common Language Runtime,公共语言运行时)是.NET Framework框架中最核心的内容,所谓CLR的执行模型,简单地讲就是解释在.NET平台下代码是如何编译和运行的。用一幅图概括如下:下面是各个阶段的工作。1,将源代码编译成托管模块 Microsoft已创建了针对各个语言的编译器,编译时编译器会去分析源代码和检查代码的语法,如果没有问题则能顺利通过编译,最终生成一个托管模块(managed module),托管模块由四部分组成,如下图所示。 1> PE32文件头:如果使用PE32格式,表明文件在windows的32位和64位版本都能运行,如果使用PE3.
阅读全文
你能熟练使用Dictionary字典和List列表吗?
摘要:命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T>列表。Dictionary字典通常用于保存键/值对的数据,而List列表通中用于保存可通过索引访问的对象的强类型列表。下面来总结一下,用代码来演示怎么初始化,增加,修改,删除和遍历元素。Dictionary<TKey,TValue>字典 代码如下:namespace DictionaryDemo1{ class Program { static void Main(string[] a
阅读全文
LINQ学习笔记(11) LINQ to XML---不必使用.NET专门的XML类就可读取XML文件
摘要:今天是LINQ学习笔记中的最后一篇文章了,这一篇要介绍的内容是LINQ to XML技术,同时这也是一项比较实用的LINQ查询就用,下面就来详细介绍它。在介绍LINQ to XML之前,我们先来回顾一下传统的XML文件处理的方式,即两个基于流的类和XmlDocument类,学习完这些后我们再来真正地学习LINQ to XML的XDocument类。一、基于流的XML处理 读写XML文件最常用的方法是使用两个基于流的类:XmlTextWriter和XmlTextReader。它们适合处理数据量小的XML文件,这是需要注意的。 1,写XML文件---XmlTextWriter类 代码如下...
阅读全文
LINQ学习笔记(10) LINQ to Entities---不需要编写任何数据访问代码就可以查询数据库
摘要:这一篇要总结的属于LINQ中非常重要的部分即LINQ to Entities,它可以实现不需要编写任何数据访问代码就可以查询数据库的一种技术。使用LINQ to Entities非常地简单,大部分都是一些可视化地操作,下面是其详细步骤:第一步:创建数据模型:1,在"App_Code"上右击选择增加项目,在打开的新窗口中选择"ADO.NET Entity Data Model",输入名字后点击"Add"按钮。如下图所示:2,接下来有两个选项,我们选择Generate from database即从现有的数据库产生,如下图:3,接下来是选
阅读全文
LINQ学习笔记(9) LINQ to Objects---查询内存中对象的集合
摘要:从这一篇开始要总结的是LINQ在实际中的应用,首先要总结的是LINQ to Objects,也就是LINQ与程序对象的配合使用。其中程序对象集合最典型就是与数组的配合使用,如下示例: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int[] numbers = { 2, 12, 5, 15 };//数据源 6 7 IEnumerable<int> lowNums = from n in numbers //定义并存储查询。 8 ...
阅读全文
LINQ学习笔记(8) 标准查询运算符(下)
摘要:接着上午的总讲,下午要总结的是标准查询运算符(下)的内容。主要的内容是委托作为标准查询运算符的参数的相关知识。首先我们要知道把泛型委托作为参数的作用是什么?泛型委托用于给运算符提供用户自定义的代码。LINQ预定义的委托类型:LINQ定义了一套5种泛型委托类型与标准查询运算符一起使用。它们就是Func委托。如下代码所示:public delegate TR Func<TR>();//第1种,没有参数。public delegate TR Func<T1, TR>(T1 a1);//第2种,接受一个参数,其中TR代表返回值。public delegate TR`Func&l
阅读全文
LINQ学习笔记(7) 标准查询运算符(上)
摘要:今天是元旦假期的第三天,明天就要开始上班了,所以想借今天的时间总结一下LINQ中标准查询运算符的知识,因为此部分内容比较多,所以我想用上,下两篇来介绍它,其中上篇要介绍的内容是标准查询运算符介绍,查询表达式和方法语法组合和标准查询运算符的签名。标准查询运算符介绍: 标准查询运算符由一系列叫做API的方法组成,它能让我们查询任何.NET数组或集合。1,有关标准查询运算符的重要特性: 1> 被查询的集合对象叫做序列,它必须实现IEnumerable<T>接口,其中T是类型。 2> 标准查询运算符使用方法语法。 3> 运算符一般返回两种结果,一种是IEnumerable
阅读全文
LINQ学习笔记(6) 查询变量和查询表达式结构
摘要:今天是2012年的第二天,今天要总结的内容是LINQ中查询变量和查询表达式的结构。查询变量:首先来看一段代码: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int[] numbers = { 2,5,28,31,17,16,42}; 6 7 var numsQuery = from n in numbers //返回枚举数 8 where n < 20 9 ...
阅读全文
LINQ学习笔记(5) 查询语法和方法语法
摘要:有两种形式的语法可供我们在写LINQ查询的时候使用,分别是查询语法和方法语法。1,查询语法和方法语法的介绍? 查询语法:是声明形式的,看上去和SQL语句很相似,查询语法使用查询表达式形式书写。 方法语法:是命令形式的,它使用的标准的方法调用。方法是一组叫做标准查询运算符的方法。 注:1> 在一个查询中可以使用两种方法的组合。 2> 查询表达式使用的查询语法会被C#编译器转换为方法调用的形式,这两种形式在运行时性能上没有任何区别。2,查询语法和方法语法在LINQ查询中的使用? 例如: 1 class Program 2 { 3 static void M...
阅读全文
LINQ学习笔记(4) 扩展方法
摘要:今天要总结的内容是C# 3.0的最新特性-扩展方法,它在LINQ查询中使用得也非常多,所以很有必要总结一下,以便于我们能更好地掌握LINQ。主要从以下几点来了解扩展方法。1,什么叫扩展方法? 故名思义,扩展方法就是在类本身所声明的方法之外增加方法。当调用的时候就像作为类的实例成员来调用一样,这就是扩展方法。2,为什么要声明扩展方法?扩展方法有什么作用? 在不修改类型定义的情况下,让该类型获得功能上的扩展。3,如何声明扩展方法? 例如: 1 class MyData 2 { 3 private double D1, D2, D3;//声明变量 4 5 ...
阅读全文
LINQ学习笔记(3) lambda表达式
摘要:lambda表达式在LINQ中使用非常多,所以要想学好LINQ,那么必须先了解什么是lambda表达式,以及它是如何使用的。首先们看一个lambda表达式在LINQ查询中的应用的例子,我想通过这个例子我们能够更快地理解lambda表达式。例如: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int[] numbers = { 2,5,28,31,17,16,42}; //创建数据源。 6 7 var numsMethod = n...
阅读全文
LINQ学习笔记(2) 匿名类型
摘要:昨天晚上因为参加部门组织的篮球赛,所以原本计划更新的内容没有按时更新,那今天我会把昨天的内容也补上,今天要总结的内容是匿名类型。1,什么是匿名类型? 匿名类型,故名思义就是没有名字(表面看不到,类名由编译器自动产生)的类型。2,匿名类型的作用? 当需要定义类来封装一些相关数据,而不需要任何相关联的方法、事件,而且这个类不需要在项目中重用时,我们也可考虑使用匿名类型来简化我们的操作。3,匿名类型对象的创建形式和示例? 创建形式: new {FieldProp=InitExpr,FieldProp=InitExpr,...} 示例: 如下代码给出了一个创建和使用匿名类型的实例,它创...
阅读全文
LINQ学习笔记(1) 什么是LINQ?
摘要:因为工作调动的关系,已经很久没有上来写博客了,最近新的工作算是稳定了,所以又有时间来跟大家分享我最近的学习心得了,真的很开心,哈哈!今天主要跟大家分享一下LINQ的知识,希望大家能够支持。在学习LINQ之前,我们有必要知道LINQ到底是什么东东?学习它有什么用途,下面就来介绍一下什么是LINQ。1,什么是LINQ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性。 注:LINQ(发音为Link)2,关于LINQ的重要高级特性? 1> LINQ是.NET框架的..
阅读全文
C#3.0学习笔记(12)进程,线程和异步编程
摘要:离职在家,没有什么事做,所以借这个机会总结一下关于异步编程的技术来跟各位园友分享。1,什么叫进程?什么叫线程? 进程:进程就是一组资源,它们构成了一个正在运行的程序。这些资源包括虚拟地址空间,文件句柄以及程序启动需要的其他东西的载体。当我们启动一个程序时,系统在内存中 就创建了一个新的进程(Process)。 线程:在进程中,系统创建了一个叫做线程(thread)的内核对象,线程体现了一个程序的真实执行情况。一旦程序准备完毕,系统在线程中开始执行Main方法的第一条语句。默 认情况下,一个进程只包含一个线程,它从程序开始执行一直到程序结束。2,什么叫异步编程(或称为多线程)? ...
阅读全文
C#3.0学习笔记(11)枚举数和foreach语句实现原理
摘要:1, 可枚举类型和枚举数? 可枚举类型:实现了GetEnumerator方法的类型,并且它返回用于项的枚举数。 枚举数:枚举数是可以依次返回集合中项的类对象。一般是可枚举类型对象调用GetEnumerator方法来获取枚举数对象。 下图解释了可枚举类型和枚举数之间的关系:2, foreach语句实现原理? foreach语句是被设计用来和可枚举类型一起使用。只要它的遍历对象是可枚举类型。 比如数组,它就会执行以下动作来实现遍历输出。 1> 通过调用GetEnumerator方法获取对象的枚举数。 2> 从枚举数中请求每一项并且把它作为迭代变量,代码可以读但不可以改。 例如://方法
阅读全文
C#3.0学习笔记(10)泛型
摘要:1, 什么是泛型? 在理解泛型的定义之前,我们要明白非泛型的概念,非泛型就是大部分情况下是声明一个类,然后封装需要的行为,最后创建这些类的实例。 泛型是一种更准确地使用有一种以上的类型的代码的方式。泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化。总结为一句话就是,泛型类型是类型的模板。 请仔细理解下面两张图,或许能更好地理解泛型的原理。2, 泛型类? 创建和使用常规的,非泛型的类的过程有两个步骤:声明类和创建类的实例。 泛型的类不是实际的类,而是类的模板,所以我们必须先从它们构建实际的类类型, 然后个构建后的类类型的实例。 下图演示了泛型类的创建过程: 3, 声明泛型类? .
阅读全文
C#3.0学习笔记(9)转换
摘要:1, 什么是转换? 答:转换是接受一个类型的值并使用它作为另一个类型的等价值的过程。2, 隐式转换? 语言(C#)会自动做这些转换,并且转换不会丢失数据或精度,这叫隐式转换。 例如,将8位的值转换为16位的值。3, 显式转换(或称强制转换)? 对于语言不提供自动转换的,如果仍要将源类型转换为目标类型的,就叫显式转换。 隐式转换时丢失数据或精度由程序负责,显式转换时丢失数据或精度由程序员负责。 例如: class Program { static voidMain(string[] args) { ushort sh = 10;...
阅读全文
C#3.0学习笔记(8)浅谈接口interface
摘要:1, 接口的定义? 答:接口表示一组函数成员而不实现成员的引用类型,类和结构可以实现接口。2, 接口的意义及为什么要使用接口? 要理解接口的意义以及为什么它是有用的,让我们先来看看下面的代码,它接受了一个没有排序的整数数组并且按升序进行排序。class Program { static voidMain(string[] args) { var myInt = new[] { 20,4,16,9,2};//隐式创建整形数组。 Array.Sort(myInt);//调用Array类的Sort方法对数组进行排序,默...
阅读全文