摘要: 1 事件的由来 在介绍事件之前大家可以先看看下面的例子, PriceManager 负责对商品价格进行处理,当委托对象 GetPriceHandler 的返回值大于100元,按8.8折计算,低于100元按原价计算。 1 public delegate double PriceHandler(); 2 3 public class PriceManager 4 { 5 public PriceHandler GetPriceHandler; 6 7 //委托处理,当价格高于100元按8.8折计算,其他按原价计算 8 p... 阅读全文
posted @ 2013-10-14 15:29 蚂蚁拉车 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 在 Framework 2.0 出现之前,委托协变这个概念还没有出现。此时因为委托是安全类型,它们不遵守继承的基础规则。即会这下面的情况:Manager 虽然是 Worker 的子类,但 GetWorkerHander 委托不能直接绑定 GetManager 方法,因为在委托当中它们的返回值 Manager 与 Worker 被视为完全无关的两个类型。 1 public class Worker 2 {.......} 3 public class Manager:Worker 4 {.......} 5 6 class Progra... 阅读全文
posted @ 2013-10-14 14:11 蚂蚁拉车 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错误,注重编程之美,代码的优雅,总结几个平常经常犯的错误。1、在C#编程中,字符型类型是最容易处理出错的地方,代价是非常昂贵,在.Net Framwork中,字符串是一个相当特别的引用类型,string本省就是一个不可继承的密封类,但是它具有了值类型所应用的特点,但是它在CLR中内 存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型的时候,就在堆内存中开辟一端内存,而当我们字符串被修改之 阅读全文
posted @ 2013-10-11 15:25 蚂蚁拉车 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 有人工作,有人上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变你我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!看完之后有种“相见恨晚”的感觉,特别激动,希望大家好好的珍藏这篇文章,相信多年以后,再来看这篇文章,一定有不同的感觉。 正如“打工皇帝”唐骏说:“我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人,头5年千万不要说你能不能多给我一点儿工资,最重要的是能在企业里学到什么,对发展是不是有利……” 人总是从平坦中获得的教益少,从磨难中获得的教益多;从平坦中获得的教益浅,从磨难中获得的教益深。一.. 阅读全文
posted @ 2013-10-11 14:32 蚂蚁拉车 阅读(173) 评论(0) 推荐(0) 编辑
摘要: linq表达式的标准形式为from...where...select,其中from后面跟的就是范围变量。linq中范围变量需要是泛型的集合,假如我们想对ArrayList或Object[]进行处理,linq就无能为力了。解决这种弱类型集合问题可以用两种方法:Cast和OfType。下面用一个实例进行演示。 ArrayList list = new ArrayList { "First", "Second", "third" }; IEnumerable strings=list.Cast(); foreach (string item 阅读全文
posted @ 2013-10-11 11:04 蚂蚁拉车 阅读(572) 评论(1) 推荐(0) 编辑
摘要: 当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单。比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码: var collection= Enumerable.Range(0,10) .Where(x => x%2!=0).Reverse().Select(x => new{Original=x, SquareRoot=Math.Sqrt(x)}); foreach (var element in collection) { Console.WriteLine("sqrt{0} = 阅读全文
posted @ 2013-10-10 11:10 蚂蚁拉车 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 从很多方面,Lambda表达式都可以看作是C# 2的匿名方法的一种演变。匿名方法能做的几乎一切事情都可以用Lambda表达式来完成,而且其更简洁、易读。下面是一个简单例子。 class Film { public string Name { get; set; } public int Year { get; set; } } class Program { static void Main() { var films = new List { new Film { Name = "Jaws", Year = 1975 }, new Film { Name = " 阅读全文
posted @ 2013-10-09 17:40 蚂蚁拉车 阅读(1103) 评论(0) 推荐(0) 编辑
摘要: 今天看了一篇博客,说的是导论的一道课后题以及博主的解答,感觉对逻辑思维的锻炼还是很有价值的,特意引用一下。这个题目的题意是这样的: 有N个人,分为好人和坏人两种,每次你可以挑两个人出来让他们互相指识彼此是好还是坏。好人一定说实话,坏人会乱说。现在你要从他们里面找出一个肯定是好人的。一共有三问:(1)证明若好人数目不超过N/2,则坏人们总可以通过故意捣乱,让你找不出正确答案。(2)证明若好人数大于N/2,存在一种方法可以通过floor(N/2)次判断使问题规模缩小到最多只有原来的一半。(3)证明若好人数大于N/2,可以用theta(N)次判断找出一个好人。 证明如下:记T=好人,F=坏人... 阅读全文
posted @ 2013-09-26 19:08 蚂蚁拉车 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 匿名方法允许我们指定一个内联委托的操作,为创建委托实例表达式的一部分。其可以对代码进行极度精简,当然可读性变得很差。下面看一个求平方根的例子。 List list = new List();list.Add(4);list.Add(5);list.Add(15);list.Add(20);list.Add(49);list.ForEach(delegate(int x) { Console.WriteLine(Math.Sqrt(x)); }); 乍眼一看,会发现其没有什么可读性。若既想精简,又要保持可读性怎么办呢,我们可以取一个折中的办法,即不再坚持“大括号单独占一行”的规则,但... 阅读全文
posted @ 2013-09-26 13:39 蚂蚁拉车 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 通俗来讲,委托就是吩咐别人去做某件事,但不知道他具体会怎么做。使用委托必须注意的一个问题是内存泄露问题:假如委托实例本身不能被回收,委托实例会阻止他的目标被作为垃圾回收。尤其是假如某“短命”的对象调用了一个“长命”的对象中的事件,并用其自身作为目标。“长命”对象间接容纳了对“短命”对象的引用,延长了“短命”对象的寿命。下面是一个只为委托而委托的例子:delegate void StringProgressor(string input); //声明委托类型 class Person { string name; public Person(string name) { t... 阅读全文
posted @ 2013-09-24 15:27 蚂蚁拉车 阅读(315) 评论(0) 推荐(0) 编辑