10 2013 档案
摘要:典故:某日,毛、周、刘三人聊天。 毛:怎么能让猫自愿吃辣椒? 刘:掐着脖子灌。 毛:强迫不是自愿。 周: 先饿几天,再混到猫爱吃的东西里。 毛:欺骗不是自愿。把辣椒涂到猫肛门上,它就会自己去舔了。 应用 1: 第一次世界大战时期,美国有一位叫哈利的 大富翁,他是一个做生意的奇才。 15岁时,他在一个马戏团当童工,主要工作是叫 卖柠檬冰水。为此,哈利动起了小脑筋。令人不解的是,在马戏开始前,他却站在门口大声喊:“来,来,顶好吃的花生米,看马戏的人每人赠送一大包,不要 钱。”听到叫喊声,观众被吸引了过去。高兴地拿走不要钱的花生米,进入戏场看马戏。 可...
阅读全文
摘要:以前如果碰到子窗体(ShowDialog显示)中的的改变会影响父窗体子控件内容时,要么就在ShowDialog()结束后更新数据,要么就把子控件设置为public。1.ShowDialog方式:不能立马看到更新结果,ShowDialog会阻断当前线程,一定要等到子窗体关闭后,线程才被唤醒。2.把控件设置了public 需要实例化父窗体,父窗体是一个大对象,虽然最终会被GC回收,GC也不知道什么时候才会把这个大对象销毁掉(书上说要等到内存不够用的时候),但始终会占用内存一段时间,影响性能不说,只为访问一个子控件而实例化一个大对象,得不偿失。3.使用事件解决问题,既然当前主线程被锁定了,用户自..
阅读全文
摘要:教材的说法:进程是资源分配的基本单位;线程是系统调度的基本单位。平时我们写的程序都是作为线程运行的;进程可以看做是包括一系列线程和资源的统称;一个进程至少包括一个线程(主线程,进入main函数时产生的);在其中可以创建其它线程,也可以不创建。同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?共享的资源有a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函
阅读全文
摘要:当某个字段是引用类型,且该字段是readonly类型时,那么不可改变的是引用,而非引用的对象。如以下代码: public sealed class AType { public static readonly char[] InvalidChar=new char[]{'A','B','C'}; } public sealed class AnOtherType { public static void M() { //下面三行代码是合法的,可通过编译,并可成功 //修改Inva...
阅读全文
摘要:前面的几篇文章已经比较完整地解释了怎么使用Log4Net,但是我们可能需要将Log4Net的日志类封装在自己的类库中,以便C/S或B/S程序进行调用。下面的示例程序简单地分为两层,一个是应用程序层WebApplication_testLog4Net,另一个就是公用类库Common。1、首先,我们还是在类库中先添加Log4net的引用2、直接在类库Common中的AssemblyInfo.cs中添加Log4Net的配置文件地址。3、log4net.config还是放在应用程序那层(如左图),以便正确地输出到应用程序的输出目录。如果放在类库层的话,它就会输出到类库的生成目录,而Log4Net只会到
阅读全文
摘要:毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里。所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命。下面我们主要讨论的是如何捕捉全局的异常。基本上在winform或web中捕获全局异常的思路都是一样的,在全局的应用程序对象中添加异常捕获的代码,并写入日志文件中。一.在Winform程序中捕获全局异常在winfrom中我们需要了解Application对象中的两个事件①Application.ThreadException 事件--在发生未捕获UI线程异常时发生。②AppDomain.UnhandledExceptio
阅读全文
摘要:一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件。 先不分析上面这段配置信息是什么意思。我们先来回想一下我们的日志类通常用来做什么,假设我们有一个库存管理系统,分为两大模块,一个是出库,一个是入库。我们可能想要出库的相关信息保存在某一个文件夹里面,入库的信息存在另一个文件夹里面。这样,我们...
阅读全文
摘要:不管用什么框架,学什么东西,最初的想法还不是尽快地用上这个框架,所以我们在这个章节还是不打算介绍具体配置节的应用,而是直接给出一个经典的使用样例,让你尽快上手。即使你对Log4Net的配置不熟悉也完全没有关系。(下面的文章假定你已经看过了第一篇,当然在有的操作中,我还是会简单地重复第一篇,以便加深你的记忆)先说说这篇教程的思路,我们打算使用Log4Net,首先必须先引入Log4Net的库;然后我们要对Log4Net进行一些配置;最后,我们会在代码里面使用它。1、引入Log4Net.dll组件→见第一篇2、自定义Log4Net配置文件的引入与第一篇不同的是,我们将不再App.config或Web
阅读全文
摘要:首先让我们先把Log4Net跑起来,示例代码在文章最后面可以下载1、先把Log4Net引入到工程中,为了演示方便,我们先建立一个winform程序。在程序的根目录下面,建立一个Libs文件夹,以便存放Log4Net的DLL文件。2、进行一些简单的配置,先不讲配置文件的作用,大家照我写的输入。下面代码库的内容是在App.config文件中输入的,如果大家没有App.config文件,可以通过在解决方案中,添加新建项→应用程序配置文件,进行添加。 3、在As...
阅读全文
摘要:为了方便开发人员使用反射或者与基本组件通信,c#编译器允许将一个表达式的类型标记为dynamic。还可将一个表达式的结果放到一个变量中,并将变量的类型标记为dynamic,然后,用这个dynamic表达式调用一个成员。如下面代码: 1 static void Main(string[] args) 2 { 3 for (int i = 0; i < 2; i++) 4 { 5 dynamic arg = (i == 0) ? (dynamic)5 : (dynamic)"A"; 6 ...
阅读全文
摘要:不同的行业领域中很多时候都分享着共同的思想和理念。比如,大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷,甚至反过来能帮助我们程序员更好的理解这些概念。下面就是我最喜欢的 10 大电影,它们都在某方便帮助了我理解编程中的某些概念。 1. 骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等。 这部具有革命性的电影。一种文明的结束是另一种文明的开始。它成了后来的很多电影效仿的对象。 2. 环形使者(2012) 概念:循环 如果生活变成了一种无休无止的循环,如何终止它? 3. 创:战记(2010) 概念:虚拟和现实 很多到了年纪的计算机科...
阅读全文
摘要:一 前言 反射 这个名词给我的第一印象就是 高深的感觉,虽然项目中有用到,只是通过反射枚举来取值,后来发现居然不需要用反射............第二个印象就是性能不高,貌似对反射大家已经形成定向思维了,一扯到反射就和性能扯上关系.....本文抛开性能不谈,因为关于性能,有太多的人做过测试了我就不说什么了,但我相信"存在即合理" 好了 进入正题!注:本人水平有限,难免会有理解不了或理解错误的地方,还望大家在评论中指出,我会马上更正。谢谢了~二 反射介绍2.1 什么是反射 有关程序及其类型的数据被称为元数据,它们保存在程序的程序集中。而程序在运行时,可以查看其他程序集或其本身
阅读全文
摘要:Win7的系统引导盘用着用着会越来越小。怎么办呢?我以前在网上查过资料,说是找个工具加大C盘。我加了,从原来的20G加到现在的35G。用了一段时间后,空间又只剩几百M了。难道又要加?? 后来,在网上找到了这个方法,好用。 当时照着网上的步骤一步步走来,终于释放了很多空间(十几个G)。 再后来,又遇到了相同的情况,忘了怎么弄了……再想找那个网页有找不到了。我当时没有保存那个网页,也忘了当时用什么关键字去搜索的了。如果有的话,我应该给那个兄弟的网页加个链接的。现在只能说Sorry了。 后来又有了类似的操作,忽然灵光一闪,又想起来怎么做了。不容易啊,所以现在想记录一下。 具体操作如下:1、...
阅读全文
摘要:声明:本方法仅仅适用于windows 7 的安装。工具准备:1、网上下载一个windows 7 系统。最好是纯净版的,非Gost 版。虽然装机慢了一些,但到用时就体会到他的流畅。2、Windows 7 USB/DVD Download Tool。这个是microsoft 公司免费提供的。(下载地址:http://images2.store.microsoft.com/prod/clustera/framework/w7udt/1.0/en-us/Windows7-USB-DVD-tool.exe)。3、一个空的u盘。安装过程:Windows 7 USB/DVD Download Tool 的安
阅读全文
摘要:Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。RC:(Release Candidate)顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。RTM:(Release to Manufacture)是给工厂大量压片的版本,内容跟正式版是一样的,不过RTM版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。OEM: 是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有
阅读全文
摘要:今天无聊中弄了个小东西,熟悉一下对listview和treeview的用法。代码如下:publicpartialclassForm1:Form{privateSchoolschool;publicForm1(){InitializeComponent();Officeo1=newOffice("计算机基础","王军","杨晓勇","何平","姜涛");Officeo2=newOffice("软件工程","马建国","陈军","
阅读全文
摘要:所谓工厂,肯定是和生产有关。工厂模式主要包括工厂方法模式和抽象工厂模式,有些人把简单工厂也作为一种模式,在本文我分别讨论简单工厂模式,工厂方法模式,抽象工厂模式。这些模式中同样也和生产有关。接下来,我们来看看各种工厂的特点。简单工厂模式 上面说了只是有些人把简单工厂看做是设计模式,其实是一种编程习惯,无论是否是设计模式,本文将先看看其用法,然后简单给出其类图,最后说出其特点。本节将面对多种比萨,先看看当顾客需要一个比萨时的过程:1.根据类型,制作一个比萨形状。2.然后进行烘烤3.切4.打包如果不熟悉的话,完全可以把其想想成面包的做法。当顾客根据自己的需求要一个比萨时,用代码模拟这个过程如...
阅读全文
摘要:ref和out往外传参数时,ref和out传递的都是变量的地址。ref侧重于修改,out侧重于输出值。ref在传递之前必须要有值,因为在方法中有可能会用到这个参数的值,out在传递之前可以没有值,因为在方法中必须为这个变量赋值
阅读全文
摘要:全文摘自http://www.cnblogs.com/g1mist/p/3227290.html,很好的一个实例。 反射提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 1.先建立实体类 用户实体类:123456789public class User{public int id { get; set; }public string UserName { get; set; }public string Password { get; set; }public int A...
阅读全文
摘要:想简化一些代码,就研究了一下反射,资料不少,感觉挺难,搞得似是而非。写了个小东西回顾一下反射的用法。 建一个User类classUser { privatestringuserid="0001"; publicstringUserid { get{returnuserid;} set{userid=value;} } privatestringuserName="aaa"; publicstringUserName{ get{returnuserName;} set{userName=value;} } privatestringaddress=&quo
阅读全文
摘要:任何一个使用.NET的人描述线程与进程的区别?什么是Windows服务,它的生命周期与标准的EXE程序有什么不同Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?EXE和DLL之间的区别是什么?什么是强类型,什么是弱类型?哪种更好些?为什么?PID是什么?在做系统的故障排除时如何使用它?单个TCP/IP端口上能够侦听多少个进程?什么是GAC?它解决了什么问题?中级.NET开发人员阐述面向接口、面向对象、面向方面编程的区别什么是Interface?它与Class有什么区别?什么是反射?使用ASMX的XML Web服务与使用SOAP的.N
阅读全文
摘要:在之前的一个课题中,曾经需要用到2W行*3W列的float类型矩阵(大约2.4G),由于无法创建大于2G的对象,当时采用了一些取巧的办法回避了,并没有拿出精力来研究一下这个问题。今天和公司的张哥(大牛级人物)重新谈到了这个话题,在他的一些指引下感觉收获颇深,发博记录一下。 首先,大家应该知道.net4.5以前,C#是无法创建内存大于2G的对象的。而且经测试,这仅仅是对64位平台的限制,在32位平台上,大约对象在1.47G左右的时候就会报异常了。至于其为什么这样设计,大家可以参考博文:http://blogs.msdn.com/b/joshwil/archive/2005/08/10/45...
阅读全文
摘要:假如有以下XML:- - - D:\888\- - \韩寒_要自由.htm 民主 - \谈谈韩寒三论.htm 民主\中国 - \韩寒_我的2011.htm 民主\中国 - \韩寒_要自由.htm 民主\中国 -...
阅读全文
摘要:abstract :表示方法是抽象方法,在子类中必须重写。抽象方法所在的类必须是抽象类,即用abstract modifiers;virtual:表示此方法是virtual方法,除了在子类中可以重写外(在子类中也可直接使用),和普通方法完全一样;override:表示重写父类的virtual方法;new: 显式隐藏从基类继承的成员;区别:virtual:标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法abstract 与virtual : 方法重写时都使用 override 关键字如果子类重写了父
阅读全文
摘要:Lambda 的表达式的编写格式如下:x=> x * 1.5当中 “ => ” 是 Lambda 表达式的操作符,在左边用作定义一个参数列表,右边可以操作这些参数。例一, 先把 int x 设置 1000,通过 Action 把表达式定义为 x=x+500 ,最后通过 Invoke 激发委托。1 static void Main(string[] args)2 {3 int x = 1000;4 Action action = () => x = x + 500;5 action.Invok...
阅读全文
摘要:1 泛型委托 Predicate 早在Framework 2.0 的时候,微软就为 List 类添加了 Find、FindAll 、ForEach 等方法用作数据的查找。 public T Find ( Predicate match) public List FindAll(Predicate match) 在这些方法中存在一个Predicate 表达式,它是一个返回bool的泛型委托,能接受一个任意类型的对象作为参数。 public delegate bool Predicate(T obj) 在下面例子中,Predicate 委托绑定了参数为Person类的方法Match作...
阅读全文
摘要: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...
阅读全文
摘要:在 Framework 2.0 出现之前,委托协变这个概念还没有出现。此时因为委托是安全类型,它们不遵守继承的基础规则。即会这下面的情况:Manager 虽然是 Worker 的子类,但 GetWorkerHander 委托不能直接绑定 GetManager 方法,因为在委托当中它们的返回值 Manager 与 Worker 被视为完全无关的两个类型。 1 public class Worker 2 {.......} 3 public class Manager:Worker 4 {.......} 5 6 class Progra...
阅读全文
摘要:在我们平常编程中,时间久了有时候会形成一种习惯性的思维方式,形成固有的编程风格,但是有些地方是需要斟酌的,即使是一个很小的错误也可能会导致昂贵的代价,要学会善于总结,从错误中汲取教训,尽量不再犯同样错误,注重编程之美,代码的优雅,总结几个平常经常犯的错误。1、在C#编程中,字符型类型是最容易处理出错的地方,代价是非常昂贵,在.Net Framwork中,字符串是一个相当特别的引用类型,string本省就是一个不可继承的密封类,但是它具有了值类型所应用的特点,但是它在CLR中内 存还是保存于托管堆之上,也就是说,当我们每次定义一个字符串类型的时候,就在堆内存中开辟一端内存,而当我们字符串被修改之
阅读全文
摘要:有人工作,有人上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变你我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!看完之后有种“相见恨晚”的感觉,特别激动,希望大家好好的珍藏这篇文章,相信多年以后,再来看这篇文章,一定有不同的感觉。 正如“打工皇帝”唐骏说:“我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人,头5年千万不要说你能不能多给我一点儿工资,最重要的是能在企业里学到什么,对发展是不是有利……” 人总是从平坦中获得的教益少,从磨难中获得的教益多;从平坦中获得的教益浅,从磨难中获得的教益深。一..
阅读全文
摘要: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
阅读全文
摘要:当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} =
阅读全文
摘要:从很多方面,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 = "
阅读全文