c#语言基础
文章平均质量分 91
w343516704
这个作者很懒,什么都没留下…
展开
-
C#与日期有关的字符串格式化方法
c# 日期函数的字符串格式化方法转载 2017-02-27 16:17:25 · 347 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性中的委托与事件(下)
C#高级特性中的委托与事件(下)方法的返回值和传引用:还有一种值得注意的情形,在这种情形下,也有必要遍历委托调用列表,而非直接激活一个通知。这种情形涉及的委托要么不返回void,要么有一个ref或out参数。在Thermostat例子中,OnTemperatureChange委托是Action类型,它返回void,而且没有ref或out参数。其结果是没有数据返回给发布者。这一点相当重要,因为调用委原创 2017-05-20 17:27:39 · 260 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性中的委托与事件:关于事件
C#高级特性中的委托与事件:关于事件本笔记写在C#学习笔记(三)—–C#高级特性中的委托与事件(下)章节后面,对前面的章节做一个补充。我觉得初学者可以通过张子阳的博客来学习委托和事件也是比较好的一个选择,里面关于委托的例子写的比较好,步步深入的方法也让初学者有一个比较舒服的学习过程,他有一本.NET之美的书籍,不妨买来看看,我当时就是看他的博客,学到了一些东西,为了表示对作者的尊重,买了一本他的书,原创 2017-05-20 18:01:14 · 296 阅读 · 0 评论 -
C#学习笔记(八)—–LinqToSql和Entity Framework(上)
LinqToSql和Entity Framework虽然linqtosql(以下简称L2S)现在已经停止更新或者更新的很慢,它的地位也由Entity Framework(以下简称EF)逐渐取代,但是理解它们的原理对于后面的深入学习EF还是非常有必要的,而且基于L2S的速度上面的优势,有时也会直接用L2S来做业务。 本章还是基于前面讲解的Linq的两个方面(本地查询和解释查询)中的解释查询来介绍的,原创 2017-06-01 15:59:29 · 2730 阅读 · 0 评论 -
C#学习笔记(八)—–LinqToSql和Entity Framework(下)
本篇大部分都摘自博客园,地址:http://www.cnblogs.com/lifepoem/archive/2011/11/15/2249303.htmlLinqToSql和Entity Framework(下)在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,转载 2017-06-01 17:20:03 · 704 阅读 · 0 评论 -
C#学习笔记(二)---在C#中创建类(下)
C#学习笔记(二)—–在C#中创建类(下)接口接口和类相似,但接口成员只提供了定义而不提供实现。他和类的不同之处有: ①接口的成员都是抽象的。相反,类包含了抽象的成员和具体实现的成员。 ②类只能继承一个类,但可以继承多个接口。而结构体不能继承(只能从System.ValueType)。接口只提供了成员的定义,也就是说成员都是隐含抽象的。接口的成员只能包括属性、方法、事件、索引器。而这些成员都原创 2017-05-17 12:12:23 · 732 阅读 · 0 评论 -
C#闭包的陷阱
陷阱我们写下面一段这样的代码: static void Main(string[] args) { List<Action> actions=new List<Action>(); for (int i = 0; i < 10; i++) { //int temp = i;先注释原创 2017-06-17 17:23:24 · 637 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:枚举类型和迭代
C#学习笔记(三)—–try语句和异常枚举类型enumerator是只读的、只能在序列的值上向前移动的游标。一个enumerator是一个实现了下列任一接口的对象: ①System.Collections.IEnumerator ②System.Collections.Generic.IEnumerator<T> 技术上讲,任何一个实现了MoveNext方法和Current属性的对象都可以被原创 2017-05-22 16:33:35 · 1001 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:try语句和异常
try语句和异常try语句是为了处理错误或者清理对象而定义的语句块。try语句后面必须定义catch语句块或finnally语句块或者后两者都有,当try块执行发生错误时,执行catch块,当结束try块或catch块时,有finally块的情况下会立即进入finally块来清理对象。catch块可以访问到异常(Exception),该对象包含错误,catch块可以弥补错误也可以再次抛出异常,如原创 2017-05-22 15:01:52 · 3149 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:匿名方法
匿名方法匿名方法是C#2.0引入的一个功能,并通过C#3.0的lambda得到了大大的扩展。匿名方法类似于lambda表达式,但是没有lambda表达式的几个功能: ①隐式的类型确定的参数 ②表达式语句(匿名方法必须是语句块的形式) ③被指定为表达式树时,转换为一个表达式树的能力写匿名方法的形式是delegate关键字后面跟一个参数列表以及一个语句块:delegate int Trans原创 2017-05-22 12:08:48 · 324 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:Lambda表达式
Lambda表达式Lambda表达式是写在委托实例上的匿名方法。编译器立即将Lambda表达式转换成下面两种形式中的一种: ①委托实例 ②Expression<TDelegate>类型的表达式树,该表达式树将Lambda表达式内的代码显示为可遍历的对象模型。这使得对Lambda的解释可以延迟到运行时。 下面的委托类型: delegate int Trasform (int i); 可以指定原创 2017-05-22 11:54:35 · 978 阅读 · 0 评论 -
C#学习笔记(一)---C#语言基础(上)
C#学习笔记(一)—–C#语言基础(上)前言:写给我自己。陆陆续续学习C#已经有8个月的时间了,但是脑子里面还是一片混乱,学的多,忘的也多,重新安心的坐在这里,把之前学过的东西整理一下。1.1第一个C#程序:using System;class test{static void Main(){int x=12*30;Console.WritleLine(x);}}在C#中语句按顺序执行原创 2017-05-13 18:54:29 · 500 阅读 · 0 评论 -
C#学习笔记(二)---在C#中创建类(上)
C#学习笔记(二)—–在C#中创建类(上)在这一章中,我们将讨论类及类的成员。类类是最常用的一种引用类型。字段字段是类或结构体中的变量。 只读修饰符:只读修饰符防止在构造后(类)被修改,只读修饰符只能在声明时或由构造函数传入时被初始化。初始化字段:字段不用必须被初始化。没有赋初始值的字段会被赋予字段类型的初始值,如int的初始值是0等。同时声明多个字段:可以用逗号在声明的时候来创建多个字段。方原创 2017-05-15 12:10:54 · 1183 阅读 · 0 评论 -
一个用来计算文本大小的方法(以及再一次对闭包的解释)
闭包 与Lambda先看一下这个方法: private static string FormatBytes(long bytes) { string[] magnitudes = new string[] { "GB", "MB", "KB", "Bytes" }; long max =(long)Math.Pow(1024, magn原创 2017-06-12 23:20:26 · 428 阅读 · 0 评论 -
C#的静态构造函数(主要说的是编译器为Lambda表达式生成的类)
静态构造函数静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。class SimpleClass{ // Static constructor static SimpleClass()原创 2017-06-13 09:38:55 · 870 阅读 · 0 评论 -
C#学习笔记(9)—–多线程基础(下)
C#5.0基于任务的异步模式处理异步工作时,任务提供了比线程更好的抽象。任务自动调度为恰当数量的线程,而且大型任务可由多个小任务组成,就和大量程序由多个小方法组成一样。 但任务有自己的缺点。其中最麻烦的是它“颠倒”了程序逻辑。为了演示这个问题,先来考虑一个同步方法,它因为一个Web请求(I/O受限的、高延迟的操作)而阻塞。然后,将它和C# 5.0之前的异步版本和基于任务的异步模式(Task-bas原创 2017-06-28 14:24:13 · 471 阅读 · 0 评论 -
C#学习笔记(9)—–多线程基础(上)
一些概念多线程处理术语太多,容易混淆,所以我们先把它们定义好。CPU(中央处理器)或者内核 是实际执行给定程序的硬件单元。每台机器至少有一个CPU;如今多CPU机器也不少见。许多现代CPU都支持同时多线程(Intel称为超线程),使一个CPU能表现为多个“虚拟”CPU。进程是给定程序当前正在执行的实例;操作系统的一个基本功能就是管理进程。每个进程都包含一个或多个线程。一个进程由System.Di原创 2017-06-26 15:49:53 · 707 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性中的委托与事件(上)
C#高级特性(上)委托委托是一种知道如何调用方法的对象。委托类型定义了委托对象可以调用的方法。具体的,它定义了方法的签名。包括方法的返回类型和方法的参数类型和数量。委托的实例实际上是调用者的代表,调用者先调用委托,委托再调用方法。这种间接的方式可以将调用这和委托分开。提示:技术上,我们把没有括号和参数的方法叫做方法组,如果一个方法被重载,那我们可以根据方法的参数类型和数量来决定使用哪一个方法。原创 2017-05-18 14:45:48 · 860 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性中的委托与事件(中)
C#高级特性中的委托与事件(中)事件委托本身又是一个更大的模式(pattern)的基本单位,这个模式称为publish-subscribe(发布——订阅)。委托的使用及其对publish-subscribe模式的支持是本章的重点。本章描述的所有内容几乎都可以单独使用委托来实现。然而,本章所着眼的事件构造提供了额外的“封装性”,使publish-subscribe模式更容易实现,更不容易出错。一个原创 2017-05-19 14:36:09 · 408 阅读 · 0 评论 -
C#学习笔记(八)—–LINQ查询创建策略
这篇文章是引用博客园的,这篇文章应该也是出自C# in a nutshell,但是翻译的比较好,容易理解。地址为:http://www.cnblogs.com/lifepoem/archive/2011/10/31/2230175.htmlLINQ查询创建策略通过前面几篇的讨论学习,我们已经了解了怎么去写一个比较简单的LINQ查询,也知道了创建LINQ查询的两种方式:方法语法和查询表达式。在这里,我转载 2017-05-31 16:10:10 · 370 阅读 · 0 评论 -
c#反射的一些总结
c#反射是一种用于获取结构元素据的技术,由于效率的问题,在开发应用程序中用的比较少新建一个控制台app,创建如下类: public class RefClass { private int _test3; private int _test1 { get; set; } protected i转载 2017-02-28 23:22:32 · 395 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:实现迭代器的捷径
实现迭代器的捷径本章摘自《C# in depth》,内容包括: 在C#1中实现迭代器 C#中的迭代器块 迭代器使用示例 使用迭代器作为协同程序迭代 器 模式 是 行为 模式 的 一种 范例, 行为 模式 是一 种 简化 对象 之间 通信 的 设计 模式。 这是 一种 非常 易于 理解 和 使用 的 模式。 实际上, 它 允许 你 访问 一个 数据项 序列 中的 所有 元素, 而无 须 关心原创 2017-05-22 21:06:51 · 577 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:可空值类型
C#高级特性:可空值类型可空值类型引用类型可以用一个空引用(null)来表示一个不存在的值,值类型,通常不能用来表示一个可空的值。例如:string s = null; // OK, Reference Typeint i = null; // Compile Error, Value Type cannot be null如果要表示一个可空的值类型,你必须用一种特殊的结构:可空值类型。它的表原创 2017-05-23 12:12:23 · 649 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:运算符重载
C#高级特性:运算符重载这章先空下,因为日常工作中,没有接触到原创 2017-05-23 16:11:59 · 347 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:扩展方法
C#高级特性:扩展方法扩展方法允许为一个类定义新的方法但是不用操作这个类。扩展方法就是一个静态类的静态方法,这个方法的第一个参数的类型就是要扩展的这个类的类型(加this):public static class StringHelper{public static bool IsCapitalized (this string s){if (string.IsNullOrEmpty(s原创 2017-05-23 16:37:09 · 422 阅读 · 1 评论 -
C#学习笔记(三)—–C#高级特性:匿名类型
C#高级特性:匿名类型匿名类型是由编译器临时创建的用来保存一组值的简单类。可以用new来创建一个匿名类型,并在后面跟上对象初始化器“{}”,在里面指定类型包含的属性名称和值,名值对:var dude = new { Name = "Bob", Age = 23 };编译器将这个语句编译成类似于下面的东西:internal class AnonymousGeneratedTypeName{pr原创 2017-05-23 16:50:47 · 279 阅读 · 0 评论 -
C#学习笔记(三)—–C#高级特性:dynamic
C#高级特性:动态绑定动态绑定动态绑定将类型绑定(类型解析、成员和操作过程)从编译时推迟到了运行时。在编译时,如果程序员知道某个特定函数、成员的存在而编译器不知道,那么这种操作是非常有用的,这种情况通常出现在操作动态语言和COM,如果不适用动态绑定,就只能使用反射(reflection)机制。动态类型是通过dynamic关键字声明的:dynamic d = GetSomeObject();d原创 2017-05-23 18:42:35 · 7392 阅读 · 2 评论 -
C#学习笔记(七)—–集合--IEnumerable和IEnumerator接口
IEnumerable IEnumerator foreach IEnumerable<T> IEnumerator<T>原创 2017-05-24 17:56:45 · 3189 阅读 · 0 评论 -
C#学习笔记(七)—–集合--ICollection和Ilist接口
ICollection和Ilist接口虽然枚举接口定义了可以迭代集合的方法,但是它们并没有定义确定集合元素多少,根据索引访问集合元素、搜索和修改元素等方法。为了实现这些功能,.NET Framework定义了IColleciton、IList、IDictionary等接口,这些接口都有相应的泛型等价物,非泛型的存在只是为了保持向后兼容。这些接口的集成关系如下图所示(在上一节有,但是为了方便又拿下来原创 2017-05-25 15:50:54 · 1229 阅读 · 0 评论 -
C#学习笔记(七)—–集合--Array
集合–ArrayArray类是所有一维数组和多维数组的基类。而且它是实现集合接口中最基本的类型之一。Array提供了类型统一性,所以常见的方法都适用于Array,而与他们声明地实际类型无关。 当使用C#语法创建一个数组时,CLR会在内部将它转化为Array的子类–合成一个对应该数组维数和元素类型的类型。这个类型实现了已经闭合的泛型IList,例如:IList<string> CLR也会特别处理数原创 2017-05-25 15:51:54 · 440 阅读 · 0 评论 -
C#学习笔记(八)—–LINQ查询的基础知识(上)
由于都是手打的字,难免会出现错误,请大家指正,感激。比如下面出现的LINQ、LInq、LINq等都是指的一个东西:LINQLINQ查询lINQ是Language Integrated Query的简称,他可以视为一组语言和框架的特性的集合,我们可以使用LINQ对本地对象和远程数据源进行结构化的类型安全的检查。LINQ在C# 3.0 /Framework 3.5时引入。LINQ用于查询任何实现了I原创 2017-05-26 09:46:19 · 527 阅读 · 0 评论 -
C#学习笔记(八)—–LINQ查询的基础知识(中)
LINQ查询(中)(接上文)Lambda表达式及Func方法签名:标准的查询运算符使用了一个泛型Func委托,Func是System.Linq命名空间中一组通用的泛型委托,它的作用是保证Func中的参数顺序和Lambda表达式中的参数顺序一致。因此,一个Fuc<TSource,bool>对应的Lambda表达式为TSource=>bool,也就是接受一个TSource,返回bool。 类似的,F原创 2017-05-26 10:44:40 · 513 阅读 · 0 评论 -
C#学习笔记(八)—–LINQ查询的基础知识(下)
LINQ查询语法和SQL语法的对比LINQ查询语法看起来和SQL语法非常相似,但他们完全不同。LINQ查询表达式是一种C#表达式,遵循C#的语法规则,例如,在LINQ中,变量必须在声明之后才能使用,与之不同的是在SQL中,select后面可以直接跟列明,而这些列所在的表在稍后的from子句中才能确定。(也就是说from这个子句在LINQ中被放到最前的原因)。 在LINQ中,一个子查询实际上就是一原创 2017-05-26 17:17:24 · 345 阅读 · 0 评论 -
C#学习笔记(八)—–LINQ查询之延迟执行
LINQ查询之延迟执行在LINQ中,另一个很重要的特性就是延迟执行,也可以说是延迟加载。它是指查询操作并不是在查询运算符定义的时候执行,真正使用集合中的数据时才执行,例如遍历数据集合时调用MoveNext方法会触发查询操作,下面是一个简单的示例:var numbers = new List<int>();numbers.Add (1);IEnumerable<int> query = numbe原创 2017-05-26 17:52:42 · 4209 阅读 · 2 评论 -
C#5.0 In A NutShell翻译勘误
一句话:这本书的翻译毁了这本书简直就没有办法来形容这本书的翻译了。到处都是错误,而且是致命的错误。有些错误会对读者造成很严重的误导,这本书翻译的太不负责任了,翻译这本书的人都可以去死了,翻译完都没有校验,直接出版的?没有这个水平,就不要去翻译,好好的一本书,你们翻译出来一坨屎!这个博客存在的意义是出版这本书的出版社官网没有翻译勘误版面,为了广大读者能够学习没有错误的知识,特意写了这个博客,有问题的原创 2017-05-18 12:20:59 · 3364 阅读 · 1 评论 -
C#学习笔记(八)—–LINQ查询之子查询
子查询在linq中,所谓的子查询就是包含在另一个查询的Lambda表达式中的查询语句。下面这个示例中就是使用子查询对一组音乐家名字按姓氏排序:string[] musos ={ "David Gilmour", "Roger Waters", "Rick Wright", "Nick Mason" };IEnumerable<string> query = musos.OrderBy (m =>原创 2017-05-31 15:53:38 · 6283 阅读 · 1 评论 -
C#的协变和逆变
协变和逆变以及不变都是基于引用类型来讲的,我们一步一步的说起。 首先,面向对象设计有一个准则是“里氏替换原则”,这个原则是在讲“基类出现的地方,可以用子类来替换。”处于演示的目的,我们创建两个类,并让一个类继承于另一个类。让我们通过C#的例子来看一下: public class BaseClass { //基类 // 处于简化的目的,这里并没有任何实现 } publ原创 2017-07-20 18:38:13 · 1808 阅读 · 0 评论