随笔分类 -  C#

摘要:反射当我们需要检查,调用一个程序集的内容的时候,用反射,比如,当VS给智能提示的时候,就应用了反射。简单用法实例:var myAssembly = Assembly.LoadFile(@"C:\ClassLibrary1.dll");var myType = myAssembly.GetType("ClassLibrary1.Class1");dynamic objMyClass = Activator.CreateInstance(myType);// 获取类的类型信息Type parameterType = objMyClass.GetType(); 阅读全文
posted @ 2013-05-27 08:42 lazycoding 阅读(3101) 评论(3) 推荐(5) 编辑
摘要:多线程揭秘Demo下载:多线程演示Demo介绍本文将通过一些例子来展示.net 中如何实现多线程,涉及到以下四部分。1 .线程概念2 .如何实现多线程3 .如何确保线程安全4 .死锁什么是进程一个进程就是一个可执行文件运行的操作系统上下文环境。它被用来分隔虚拟地址空间,线程,对象句柄(指向类似文件这样的资源的指针),以及环境变量,进程还有一些类似优先级类和最大内存分配的属性。也就是说:1 .一个进程就是一个包含资源的内存块。2 .操作系统执行的一个单独的任务。3 .一个正在运行的软件4 .一个进程拥有一个/多个操作系统线程一般的。一个进程最大可以是4GB的内存空间,这块内存是安全,私有,其他进 阅读全文
posted @ 2013-02-06 13:56 lazycoding 阅读(2708) 评论(8) 推荐(0) 编辑
摘要:背后的秘密-MSIL通过著名的LINQPad,我们可以更深入的查看MSIL代码而没有任何秘密。下图是一个LINQPad的使用截图我们会看三个例子,第一个Lambda表达式如下:Action<string> DoSomethingLambda = (s) =>{ Console.WriteLine(s);// + local};对应的普通函数是这样的Action<string> DoSomethingLambda = (s) =>{ Console.WriteLine(s);// + local};生成的MSIL代码片段如下:DoSomethingNormal 阅读全文
posted @ 2013-01-06 13:50 lazycoding 阅读(479) 评论(0) 推荐(0) 编辑
摘要:闭包的影响为了展示闭包的影响,我们看下面这个例子。var buttons = new Button[10];for(var i = 0; i < buttons.Length; i++){ var button = new Button(); button.Text = (i + 1) + ". Button - Click for Index!"; button.OnClick += (s, e) => { Messagebox.Show(i.ToString()); }; buttons[i] = button;}//如果我们点击按钮会发生什么这个问题很怪, 阅读全文
posted @ 2013-01-06 13:47 lazycoding 阅读(398) 评论(0) 推荐(0) 编辑
摘要:好长时间没发技术文章了,恰好看到一篇非常详细的Lambda文章。一边翻译一边学习。题目好像有点霸气。。介绍Lambda表达式是使代码更加动态,易于扩展并且更加快速(看完本文你就知道原因了)的强有力的工具。也可以用来降低潜在的错误。同时可以利用静态输入和智能提示,就像VS里一样。Lambda表达式在.net framework 3.5中提出来。并且在LINQ和ASP.NET MVC内部的一些技术中扮演了相当重要的角色。如果你考虑一下ASP.NET MVC中各类控件的实现。你就发现。奥妙就是他们大多使用了Lambda表达式。和Lambda表达式一起,使用Html扩展方法将会使得在后台创建模型成为可 阅读全文
posted @ 2013-01-06 13:45 lazycoding 阅读(471) 评论(0) 推荐(0) 编辑
摘要:1.什么是Lambda表达式Lambda表达式是一个匿名方法,通常在LINQ中被用来创建委托简单来说。它是一个没有声明,没有访问修饰符,没有返回值。甚至没有名字的方法。2.为什么我们需要使用Lambda表达式?或者说为什么我们要写一个没有名字的函数?为了方便,这种快捷方式允许你在调用的地方直接编写代码,尤其是你想调用的代码只会在这个地方使用一次。并且方法体本身很短。节省了单独写方法中写声明等等的麻烦。。好处1.代码量减少。不必写方法的名称。返回值和访问修饰符2.当阅读代码的时候。直接就可以看到被调用函数的代码,不用去别的地方。Lambda表示应该短些。太复杂了。可读性就下降了如果编写Lambd 阅读全文
posted @ 2012-12-08 19:33 lazycoding 阅读(1038) 评论(1) 推荐(1) 编辑
摘要:很早的时候,学习数据结构的时候。收集了一下演示的动画。帮助理解。但是不全。今天在看KMP算法的时候。看到了福州大学的一个精品课程。。81个演示动画呢。。想打包下载收藏。话说福州大学这才是好样的。踏踏实实搞学术。第一种方法就是手工了。。嘎嘎。你敢么。一个个下载。。。一个个改名。。第二种就是用整站下载的软件了。。但是我看了一下swf的命名。我就知道下载下来意义不大。因为名字不好理解。第三种就是自己写个程序吧。。整体思路,首先访问课程页面,解析得到每一章的标题和内容,然后创立章节文件夹,得到每个动画对应的html页面,然后对html页面解析,提取swf地址。然后下载就行了。比较疼的地方是那个页面用的 阅读全文
posted @ 2012-12-03 20:37 lazycoding 阅读(7368) 评论(21) 推荐(17) 编辑
摘要:坊间流传的代码都有些问题,比如不能正常获取win7以上的版本信息,不能获取诸如专业版,旗舰版等的信息,不能正常获取操作系统位的信息。使用代码,写了一个简单的库来实现效果。用法大概如下:StringBuilder sb = new StringBuilder(String.Empty);sb.AppendLine("Operation System Information");sb.AppendLine("----------------------------");sb.AppendLine(String.Format("Name = {0}& 阅读全文
posted @ 2012-11-23 13:33 lazycoding 阅读(1005) 评论(0) 推荐(0) 编辑
摘要:昨天读完了程杰的《大话设计模式》。。收获颇丰。深刻感到了设计模式的伟大。。对面向接口的编程也理解了不少。刚好看到codeproject上一篇将依赖倒置的。讲到了依赖注入的方式。仔细读了一下。翻译一遍加深认识。高耦合的代码随着项目复杂性的不断增加,最终会变成一碗碗的意大利面条啦。。二者通常是软件设计上的问题,如果一个类对另一个类的实现了解太多。当该类改变的时候会引起更多的改变。这违反了依赖倒置原则而松耦合的代码设计优良。随着时间流逝,代码复杂两增大,松耦合的好处会变得更加清晰,依赖注入模式是实现松耦合的一个好的办法,本文介绍在没有依赖注入容器的情况下实现依赖注入GoF说了,依赖倒置的原则:高层模 阅读全文
posted @ 2012-11-21 19:51 lazycoding 阅读(5027) 评论(5) 推荐(1) 编辑
摘要:Throw会抛出/传递异常,通过在catch块里使用throw语句.可以改变产生的异常,比如我们可以抛出一个新的异常,throw语句有各种各样的,并且很有必要.例子我们首先看一下三个方法,分别叫做A,B,C,他们使用不同的throw语句。方法A使用了无参的throw语句。这可以被看作是rethrow(继续抛出)—他会抛出已经出现的同样的异常继续,方法B throw一个命名的异常变量。这就不是一个完全的rethrow了—因为他虽然抛出了同样的异常。但是改变了StackTrace(堆栈轨迹),如果有必要的话,我们可以收集一些异常信息,而方法C则创建了一个新的异常。提示:你可以通过这种方法实现自定义 阅读全文
posted @ 2012-11-18 12:36 lazycoding 阅读(30810) 评论(0) 推荐(2) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文实现模板模式背景有时候我们需要做很多任务,而做这些任务的算法可能不同,这样可以设计成策略模式,这样。执行该任务的基本的一些代码就是一样的。但程序可可以动态的切换来执行任务的不同部分了。现在,真实的情况是有些算法,从实现层面山看,有可能有一些步骤是不一样的,这种情况下。我们可以使用继承来完成。当有个算法,而这个算法的一部分却多样的时候。使用模板模式就很好。GoF定义模板模式为:"Define the skeleton of an algorithm in 阅读全文
posted @ 2012-10-25 22:12 lazycoding 阅读(332) 评论(0) 推荐(0) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文介绍外观模式,并给出简单的实现示例背景写软件的时候,有时候需要处理一系列的对象来完成一个确定的任务.比如,我们给一个万能遥控器写代码,我们需要关掉所有的设备,那么,我们有这样几种选择.第一个就是手动选择每一个设备,然后一个接一个的关闭,这好傻.那我们为什么不再遥控器上放一个按钮,我们按一下就关掉了.按钮的命令会与设备控制器通信然后关掉他们.如果我们又想在晚上12的时候自动关闭设备,那么我们就会有一个基于事件的计时器,与设备通信,然后关闭设备,问题是在两种情况下我们 阅读全文
posted @ 2012-10-23 18:44 lazycoding 阅读(1127) 评论(0) 推荐(1) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!背景本文讨论装饰器模式,这个模式是因为很多情况下需要动态的给对象添加功能.比如我们创建了一个Stream类.后来需要对这个数据流类动态的添加一个加密功能.有人可能说把加密方法写到流类里面啊.然后使用一个bool变量来控制开关就行了.但是这样.这个加密方法只能写一种..如果用派生类来实现.那么..对于不同的加密方法.,都要创建一个子类,举个例子.比如有时候是一些函数的组合.我们最终的派生类的数目基本上就和排列组合的数目一样了.我们使用装饰器模式来解决这个问题.GoF描述为& 阅读全文
posted @ 2012-10-22 11:37 lazycoding 阅读(1460) 评论(6) 推荐(1) 编辑
摘要:著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!本文用C#实现原型模式,也会讨论深浅拷贝,已经如何在.net中高效实现ICloneable 接口介绍有时候我们需要从上下文得到一个对象的拷贝,然后通过一些独立的操作来处理他。原型模式在这种情况下很适用GoF 定义原型模式为用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Specify the kind of objects to create using a prototypical instance, and create new objects by 阅读全文
posted @ 2012-10-20 20:04 lazycoding 阅读(964) 评论(0) 推荐(0) 编辑
摘要:这是Office2010中的文件菜单点开后的效果。本文我将以强大的WPF来实现类似的效果。希望你能有所收获。而不是只拷贝/粘贴代码而已。开始之前。先把TabControl找个地方放着。<Window x:Class="TestClient.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ma 阅读全文
posted @ 2012-10-17 10:01 lazycoding 阅读(3320) 评论(6) 推荐(2) 编辑
摘要:有时候对于对象来说。在一个软件中,不直接通过互相引用而做到共享信息是非常有用的。比如像带有插件的软件。可以互相进行通信。假设我们有了很多对象。其中一些包含一些数据。而另一些对象需要消费这些数据 不同的子集,我们不通过对数据生产者和消费者的直接引用来实现,而是通过更低耦合的方式。叫做创建一个“BlackBoard”(黑板)对象。该对象允许其他对象自由对其进行读取/写入数据。这种解耦方式使得消费者不知道也不必知道数据来自哪里。如果想要了解更多关于黑板模式的信息。我们常说的。Google是你最好的朋友。 一个最简单的黑板对象应该是 Dictionary一些简单的命名值的字典。所有的对象共享同一个字. 阅读全文
posted @ 2012-10-16 12:12 lazycoding 阅读(1908) 评论(0) 推荐(1) 编辑
摘要:简单科普文,作者给的Demo我合并了下。VS2010直接打开解决方案。二者都有。介绍本文展示在WPF中如何创建用户控件并且如果在WPF项目中使用。我将使用VS2008和C#来展示如何创建一个自定义的ToolTip背景这篇由Sacha Barber.写的和我的有点像。使用代码开始。首先,我们创建一个用户控件。因此,我们选择新建WPF用户控件类库(WPF User Control Library)。现在。我们可以创建或者编辑XAML代码来创建自定义的用户控件了。我使用XAML来创建自定义的ToolTip。你想做什么随你。<UserControl Name="UserControlT 阅读全文
posted @ 2012-10-15 08:37 lazycoding 阅读(8245) 评论(1) 推荐(5) 编辑
摘要:介绍最近,我发现我需要个圆角多边形。而且是需要在运行时从用户界面来绘制。WPF有多边形。但是不支持圆角。我搜索了一下。也没找到可行的现成例子。于是就自己做吧。本文描述了圆角多边形的实现,也包括如何用在你的项目里。在Demo里面的RoundedCornersPolygon 类是完整的实现。下载的Demo包括两部分1. 通过XAML绘制圆角多边形2. 运行时创建圆角多边形背景多边形可以被认为是沿着一个给定半径的圆的边缘和一些指定点/边。所构成的点的集合。在WPF中。你可以给Polygon对象的Points属性添加一系列的点来制作多边形。XAML方式<Canvas> <Polygo 阅读全文
posted @ 2012-10-13 09:49 lazycoding 阅读(13385) 评论(1) 推荐(6) 编辑
摘要:图11.介绍从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮。WPF最好的一个方面就是允许自定义任何控件的样式。用了一段时间的Microsoft Expression Blend后。我做出了这个样式。我觉得做的还行。因为。我决定分享。如我所说。我使用Microsoft Expression Blend来做。但是。我也是用XAML编辑器--Kaxaml。2.概述玻璃按钮样式包含了三层。组织了玻璃效果(Glass Effect)和一个ContentPresenter 来存储按钮的内容。所有的这些层都在一个最外层的Grid里。当鼠标放到按钮上,按下去的时候也定义了一些触发器(Trigger 阅读全文
posted @ 2012-10-12 09:33 lazycoding 阅读(9961) 评论(2) 推荐(3) 编辑
摘要:WPF里是没有LinkLabel控件的。因此我自己写一个。首先。我们看一下WPF中什么类似的组件可以实现这个链接功能如果你想要模拟一个LinkLabel控件。你可以在TextBlock里使用内联的Hyperlink。像下面这样<TextBlock> <Hyperlink> <Run Text="Test link"/> </Hyperlink></TextBlock>你可以使用Label控件。加一个内联的HyperLink,但是我认为TextBlock更好。因为你可以在Expression Blend中通过Inli 阅读全文
posted @ 2012-10-11 13:28 lazycoding 阅读(3757) 评论(2) 推荐(1) 编辑