<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[AspDIY.Net - My Documents]]></title>
<link>http://www.aspdiy.net/</link>
<description><![CDATA[网站设计相关技术文档及心得！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[983493#qq.com(不必)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>AspDIY.Net</title>
	<url>http://www.aspdiy.net/images/logos.gif</url>
	<link>http://www.aspdiy.net/</link>
	<description>AspDIY.Net</description>
</image>

			<item>
			<link>http://www.aspdiy.net/article/mydocuments/143.htm</link>
			<title><![CDATA[酷睿i系列和P系列和Ｔ系列有什么区别]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Tue,06 Jul 2010 22:43:08 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=143</guid>
		<description><![CDATA[T和P都是酷睿1和酷睿2系列。<br/>其中T系列属于普通版（也可以称作是性能型）可以纵跨三个时代，即酷睿1代，酷睿2代 Merom架构，酷睿2代45纳米Penryn架构。酷睿1代比较著名的有T2400，T2500，T2050，等等。核心架构是Yonah，改进自奔腾M的dothan，但是并非简单将两个dothan拼凑到一起，功耗降低的同时，效率加强了，主频也可以轻易提高更多。但是只有笔记本型，没有台式机型，只能支持32位，不支持64位运算和寻址功能。尽管不支持64位指令集，但是强悍的工艺，让酷睿1代的性能超过了同时期的AMD。]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/142.htm</link>
			<title><![CDATA[配色方案]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Fri,02 Jul 2010 10:49:42 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=142</guid>
		<description><![CDATA[<a href="http://hi.baidu.com/fishfingers/blog/item/af04de4ea028b03baec3ab2c.html" target="_blank" rel="external">http://hi.baidu.com/fishfingers/blog/item/af04de4ea028b03baec3ab2c.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/134.htm</link>
			<title><![CDATA[健康比什么多重要 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Wed,30 Dec 2009 09:57:02 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=134</guid>
		<description><![CDATA[1、 本配方所用药物，以食物为主，绝对无毒。<br/>2、 为使读者易懂，剂量单位均用旧制，如：斤、两、钱等，有的用碗，是指一般性中碗。<br/>3、 所用药物凡带有*记号的一般可到中药店买，药店都有。<br/>4、 报告中所讲的醋，就是一般食用醋，如果用白醋的，报告中另有注明。<br/>5、 报告中所讲的白酒，是指50度以上的白酒。<br/>6、 有些疾病治疗期间需忌口，是指用药期间如不忌口，则会影响疗效。<br/>7、 本报告共三部分，每部分最后均附有防病保健知识，本报告是一专家用了近十年时间，翻阅了大量的医疗保健知识书刊，结合古代民间流传已久的传统秘方整理出来 的宝贵资料。它汇聚了古今诸多名方、妙方、秘术，不仅能为百姓带来方便，是每个家庭必备的报告资料，而且，对一些中西医专业医生来讲，也是很有参考价值 的。 、 <br/>民间实用土方（上）<br/>一、 内 科<br/>1、 初起感冒：葱白（连须）、生姜片5钱、水一碗煎开、加适量红糖乘热一次服下（葱姜不需服下），并马上睡觉，出汗即愈。<br/>2、 多日感冒：白天用法同第一条，另外，要在晚上睡觉前，用大蒜头捣成糊状，敷两足心（涌泉穴，每足心敷黄豆粒大即可），用布包好，次日晨揭去，连用2-3天即愈。<br/>3、 头痛（各种头痛均可）：生白萝卜汁，每次滴鼻孔两滴（两鼻孔都滴），一日两次，连用4-5天，可除根。忌吃花椒、胡椒。<br/>4、 头晕（头昏眼花、晕眩）：鸭蛋一个、赤豆20粒，搅匀蒸熟，早晨空服，每日一此，连用7天有特效。忌吃酒、辣。<br/>5、 失眠、多梦：睡前用半脸盆热水，加一两醋双脚浸泡20分钟，并生吃葱白1-2根。<br/>6、 干咳（感冒或其他原因引起均可）：生黑芝麻3钱（约一调羹），冰糖适量，共捣碎开水冲早晨空服，3天痊愈，少吃鱼类。<br/>7、 有痰咳（包括急性气管炎、支气管炎、儿童气管炎）：白萝卜二两，鸭梨二两，一起切碎加水一碗煮熟加适量冰糖食用，一日二次连用3天。清热化痰。可与第九条同用。<br/>8、 老气管炎（慢性气管炎）：取冬天打霜后丝瓜藤*一两、甘草*一钱，水一碗煎汤一次服下，一日二次，连用半月至20天，可根治。忌烟酒、辣物，最好与第九条同用。 <br/>9、 长期咳嗽（肺气肿及气管炎等引起咳嗽）：明矾一两，研成粉用醋调成糊状，每晚睡前取黄豆大一团敷足心（涌泉穴，两足都敷），用布包好、次日晨揭去，连用7天有特效。<br/>10、 哮喘（儿童哮喘同）：干蚯蚓*半斤，炒黄研成粉，用白糖水冲服，一次2钱（约半调羹粉）一日二次，服完即愈。忌吃辣物。<br/>11、 胃痛、吐酸、胃下垂、胃窦炎：大蒜头一次一两连皮烧焦，再加一碗水烧开、加适量白糖空腹食用，一日二次，连用7天可根治。<br/>12、 胃、十二脂肠溃疡：鸡蛋壳30个炒焦研成粉，麦面粉半斤炒焦，一起抖匀，早晚饭前用。开水冲服，一次2钱（约半调羹），一日二次，一般一付药可愈，重病需二付。<br/>13、 高血压、高血脂：芹菜籽*一两，用纱布包好，放10斤水煎汤，早、中、晚饮1杯。不怕辣者，可，早中晚食生蒜2头，有降血压、血脂特效。<br/>14、 心脏病、冠心病：花生壳一次一两，绿豆5钱，煎一碗汤服下，一日二次，需半月。<br/>15、 肠胃炎、腹泻：每次用麦面粉半两炒焦，加适量白糖用开水调匀，饭前服，一日二次，2-3天有特效。忌吃柿子、香蕉、油腻。<br/>16、 消化不良（儿童消化不良同）：鸡盹皮4两炒黄研成粉，饭前用白糖水冲服、一日二次，一次2钱（约半调羹）、儿童减半、一剂服完即可，忌吃田螺。<br/>17、 胸闷气胀：白萝卜籽*5钱、煎一碗汤服，一日三次，连用3天有消积顺气之功效。<br/>18、 神经衰弱：猪脑1两，加入蜂蜜一调羹，蒸熟吃，一日一次，连吃5-10天。<br/>19、 贫血：杀鸡、鸭时，将鲜血流在一张干净白纸上，晒干揉成粉，用葡萄酒调服，一次半调羹粉，一日二次，连服半月。忌海带。<br/>20、 内热口干：芦根*、绿豆各5钱，加一碗水煮开、加适量冰糖、去芦根吃豆喝汤，日服二次，连服3天。生津润肺，降火解热。<br/>21、 慢性肝炎：每次用白茅根*二两，烧一碗水服汤，一日三次，一般需服半月，忌辣物。<br/>22、 胆、肾、尿道结石：用鸡内金、玉米须50克，煎一碗汤一次服下，一日2-3次，连服10天。忌吃肝脏、肥肉、蛋黄。<br/>23、 急、慢性肾脏炎：4两重左右黑鱼一条，去鳞、肠等，绿茶叶2钱，包入鱼肚内用线捆好，加一碗水煮熟，吃鱼喝汤，一日一剂，连吃10-15天。忌酒、盐、香蕉、房事。<br/>24、 胆囊炎：冬瓜籽、绿豆各5钱煎一碗汤，一次服下。一日三次，连用10日。<br/>25、 糖尿病：猪胰一条，冬瓜皮1两，加水煮熟，少加些油、盐和调料（勿加酒、糖）吃下，一日一剂，连吃20天。<br/>26、 记忆力差：鹅蛋一只，打入碗内加适量白糖搅匀，蒸熟早晨空服，连吃5天，有清脑益智功能，对增强记忆有特效，忌吃海带、花椒、动物血、酒、绿豆。<br/>27、 小便不通：杨柳树叶1两，煎一碗汤一次服下，一日二次，2-3天即可通尿无阻。<br/>28、 小便失禁（尿急、控制不住）：鸡肠一付，洗净晒干，炒黄研成粉，用黄酒送服，每次1钱，一日三次，服完即愈。忌姜、辣。<br/>29、 尿频（小便次数多）：生韭菜籽*3两，研成粉，每次2钱用白开水送服，一日二次，一般需服2-10天。忌浓茶、牛奶。<br/>30、 便秘（大便燥结、排便困难）：用煮熟的南瓜一碗，加入猪油5钱和适量的盐吃下，一日一次，一次见效，3日可愈。<br/>31、 痢疾、泄泻：每次用大蒜两头，连皮放火内烧焦再煮一碗水空服汤，一日二次，连用3天可消炎解毒，治久泻不愈特别有效。<br/>32、 打鼾：花椒5-10粒，睡前用开水泡一杯水，待水凉后服下（花椒不服下），连服5天，以后再也不打鼾。<br/>33、 打嗝：用手指甲一小条，点燃闻味，即止。<br/>34、 晕车：乘车时切一片生姜含口中，或用一块膏药贴在肚脐上（此条孕妇禁用），对于晕车教严重者，可两方同用，有特效。<br/>35、 中风：每日喝1两生芹菜只汁，病轻者服半月，病重者服一月可愈，忌吃羊肉、鸭血。<br/>36、 神经病（又叫癫痫、羊癫痫、疯狂病、狐大仙）：干桃化*3两，用刀切成细末，分成十份，每次一份，在发病时用淡明矾水送服，一日二次，5天一疗程，连用3疗程。<br/>37、甲状腺功能亢进症：黄药子*9-12克，用三碗水煎成一碗，每日一次；另可用50克泡1斤白酒，日服1两，5-8周代谢率明显降低。<br/>38、 慢性肠炎：鸡蛋清1只，白酒半两，混合，每晚睡前服。 <br/><br/>二、儿科<br/>39、 小儿感冒（包括婴儿）：生姜5钱，水半碗煎开加入红糖服下，一日二次，2天可愈。<br/>40、 百日咳（及婴儿气喘）：大蒜一头，去皮捣烂加白糖3钱，过半小时后用开水一两冲，两天可治小儿咳嗽、婴幼儿气喘，有特效。<br/>41、 小儿遗尿：生葱白一根，捣烂，每晚睡前敷肚脐，用布包好，次日晨揭去，连用3-5天，可治愈。<br/>42、 夜啼：大人用一小撮绿茶放口内嚼碎，每晚睡前敷小儿肚脐，用布包好，次日晨揭去，连用3天。<br/>43、 婴幼儿腹泻、腹胀：大蒜一头，连皮烧焦，再与半碗水烧开，加适量白糖服汤，一日一次，一般两三天即可消食止泻。<br/>44、 盗汗（成人盗汗同）：老豆腐半斤，切片贴锅内烧成巴，再加水一碗，白糖适量，烧汤连巴一同食用，每晚睡前服，3天痊愈。<br/>45、 打蛔虫：生南瓜籽20粒，去壳饭前空服，一次吃下，第二天虫子即可随大便排出。<br/>46、 经常肛门痒：伤湿解膏一块，每晚睡觉前贴肛门上，次日晨揭去，连用三天。<br/>47、 小儿厌食（不思吃饭）：山楂*3钱，鸡盹皮1钱，加半碗水煮熟饭前吃完，一日二次，连吃三天，有开胃、助消化之功效。<br/>48、 腹痛（成人腹痛同）：用一片桔皮敷在肚脐上。再用半斤盐炒热（不要太烫），敷在桔皮上，可立即止痛。<br/>49、 误食杂物：韭菜半斤，不要切碎，炒熟多加些猪油，一次吃光，杂物可随大便排出。<br/>50、 磨牙：每晚睡前吃一块生桔皮，连吃2-3天，可治小儿及成人睡觉磨牙。<br/>51、 流口水（成人、老人睡觉流口水方法同）：泥鳅半斤，去内脏晒干，炒黄研成粉，用黄酒冲服，一次二钱，一日一次，服完即可。<br/>52、 儿童缺钙：每次用虾皮5钱，海带1两，一起煮汤，加油盐食用，一日一次连用半月。<br/>53、 腮腺炎：醋和墨汁按1：1配好，用毛笔蘸此，涂于患处，每天5-6次，一般二三天腮部肿胀自消。<br/>54、 小肠气：生姜汁5钱，先给患儿洗澡，待周身出汗时，用姜汁擦患部，一日二次，连用三、四天，以后不再复发。<br/>55、 考场镇静良方：学生进考场如临战场，往往由于过度紧张，使自己产生心慌、怯场现象，从而不能正常发挥而名落孙山。现介绍一种单方：酸枣仁*、绿豆各一两，煮一碗汤一次吃完，一日二次，次方要在考试前两天开始服，至考试结束，有镇静安神功效。 <br/><br/>——————————————————–<br/>附：防病保健知识（一）<br/>1、 为什么常吃烘烤食物易患癌：因烘烤食物时燃料中会产生大量的二氧化碳、二氧化硫和一种叫3，4-苯丙比的致癌物质，这些物质会遗留在食物上，所以人吃多了极易患癌。<br/>2、 吃哪些蔬菜易中毒：1）、发芽、发青的土豆有毒。2）鲜黄花菜（即金针菜）有毒。3）腌制未透的菜。4）隔夜熟白菜、熟韭菜会将菜中的硝酸盐转化为亚硝酸盐，亚硝酸盐是强致癌物，熟白菜、熟韭菜放久了切勿吃。<br/>3、 儿童不宜吃皮蛋：皮蛋在加工过程中加入一种氧化铅的物质，此物有毒，影响智力<br/>4、 烂姜不宜吃：烂姜有极毒，能坏死肝细胞。<br/>5、 豆油不可生吃：生豆油中含有苯，苯能破坏人的造血系统，所以做凉拌菜和饺陷不宜用生豆油，如将豆油下锅熬熟，苯就蒸发了。<br/>6、 久煮的水不能吃：隔夜开水和经久煮的水以及保温瓶中非当天的开水中，均含有一种叫亚硝酸铵的物质，此物是强致癌物。<br/>7、 鱼、肉烧焦吃不得：鱼、肉等荤菜，烧焦就会产生一种叫苯丙比的致癌物质。<br/>8、 新婚男子莫吃可乐：可口可乐，能将人体内精子杀死，所以婚后男子要想孩子切莫吃。<br/>9、 吃嫩炒猪肝有害：猪的肝脏是解毒器官，肝内均含少量毒素，如不炒透，吃了有害。<br/>10、 哪些水果忌海味？柿子、葡萄石榴、山查、香蕉，这些水果中含有鞣酸。鞣酸与海味中的钙结合，会形成一种难以消化的物质，而起肚疼、呕吐、恶心、腹泻等现象。<br/>11、 哪些食物易使皮肤变黑？常吃肝脏、肾、赤豆、黑芝麻、乌鱼、浓咖啡、易使皮肤变黑。<br/>12、 哪些食物易使皮肤增白？一般为黄绿色食品如芹菜、菠菜、洋葱、苹果、萝卜等。<br/>13、 吃豆浆有哪些四忌？1）忌吃红糖2）忌冲鸡蛋3）忌不熟4）忌用保温瓶装。<br/>14、 吃牛奶有哪五忌？1）忌加红糖2）忌冰冻3）忌掺开水4）忌空服5）忌同补药同服。<br/>15、 油渣、锅巴不宜吃：油渣、锅巴中含有苯丙比，苯丙比是致癌物质，所以不宜吃。&nbsp;&nbsp;<br/>三、外科<br/>56、 关节炎、肩周炎（包括风湿性、类风湿性关节炎）：食用细盐1斤，放锅内炒热，再加葱须，生姜各3钱，一起用布包好，趁热敷患处至盐凉；一日一次，连用一星期，有追风祛湿之功效。<br/>57、 劳伤腰痛：艾叶*一两，炒黄的蟹壳一两，浸白酒一斤，三日后用酒涂腰部，一日2-3次，7-10天，可治多年腰痛。<br/>58、 肾亏腰痛：丝瓜籽半斤，炒黄研成粉。白酒送服，每次1钱，一日二次，服完即愈。此方还可治妇女产后腰痛。<br/>59、 坐骨神经痛：食用细盐一斤，炒热后加艾叶*一两，用布包好敷患处至盐凉，一日一次，连用5-10天。（盐可每天反复使用）。<br/>60、 颈椎痛：羊骨头（生的，煮过均可）二两，砸碎炒黄，浸白酒1斤，三日后擦颈部，一日三次，一般不过15天，可以根治。<br/>61、 骨刺（骨质增生）：狗骨头三两，砸碎炒黄浸白酒1斤，三日后用酒擦患处（最好带吃此酒一盅），一日三次，需用半月可愈。<br/>62、 腿抽筋：桑树果*一两，煎一碗汤一次喝下，一日二次，5天痊愈。<br/>63、 四肢麻木：老丝瓜筋*一两，煎一碗汤一次服下，一日二次，连服一星期，有特效。<br/>64、 内、外痔疮：大田螺每天一只，将盖去掉。放入冰片*1钱，5分钟后取田螺水涂肛门，每天2次，7天痊愈，忌吃酒、辣物。<br/>65、 打针结块：将土豆切成半公分厚的薄片，敷在患处，再用热毛巾捂，一日二次，一次20分钟，2-3天肿块消散。<br/>66、狐臭：胡椒、花椒各50粒，研成粉，再加入冰片*2钱，用医用酒精调匀，每日取一小团涂患处并用胶布贴好，一日换一次，连用半月可根除。<br/>67、 口眼歪（面部神经麻痹）：黄鳝血涂面部，向左歪涂左边，并用手掌从左向右反复抹，每次2分钟，一日二次，向右歪则反做，连用三四天即正。<br/>68、 脱肛（解大便时肛门脱下）：每次用韭菜半斤，水2斤煎开洗肛门，一日二次，洗三天。<br/>69、 落枕（睡觉时由于枕头或姿势不适，而引起的颈痛）：韭菜汁加热擦颈部，日擦七八次。2-3天可治好。<br/>70、 戒烟：干南瓜藤*一两，煎一碗汤加适量红糖一次服，一日三次，7天后永不想抽烟。<br/>71、 戒酒：活黄鳝一条，放一瓶白酒内浸二天后此酒，1次1-2两，一日三次，将酒服完后永远不想再喝一滴酒。<br/>72、 喝酒不醉：葛根*1钱，在喝酒前泡一杯开水喝下再喝酒，酒精可解，所以人不会醉。<br/>73、 疥疮（老烂脚）：豆腐渣炒热，敷患处，用布包好，日换一次，可治愈烂脚久不收口。<br/>74、 淋巴结核：田螺壳炒黄研成粉，用芝麻油调匀敷患处，日换一次，连用7-10天。<br/>75、 长寿保健药酒：磁石、何首乌*、大枣、核桃、枸杞*各一两，浸白酒或黄酒二斤，两天后按常日酒量吃此酒，如常饮能使老人面部红润，增强抗病力，有延迟衰老功效。四、皮肤科<br/>76、 皮肤痒：鲜韭菜、淘米水，按1：10重量配好，先泡二小时再连韭菜一起烧开，去韭菜用水洗痒处或洗澡，一次见效，洗后勿用清水过身，一日一次，连洗三天永不再痒。<br/>77、 牛皮癣、顽癣（银屑病）：侧柏叶*、苏叶*、各200克，蒺藜*40克，共研粗末，装纱布袋内，用水6斤沸煮后小火煮30分钟，涂洗患处，日3次。<br/>78、 神经性皮炎（或过敏、或季节性发生）：老豆腐三、四两炒焦，用芝麻油调匀涂患处，一日3次，三、四天有特效。<br/>79、 湿疹(皮肤起红点、水泡、发痒)：用绿豆3两炒焦研成粉，用醋调匀涂患处，一日二次，连涂一星期可根治。忌花椒、胡椒。<br/>80、 风疹块、痱子：鲜韭菜汁每天涂患处，一次即明显见效，一日三次，2-3天即愈。<br/>81、 白癜风：乌梅*30-50克浸泡在95%酒精100毫升中，2周后过滤再加二甲亚矾*5毫升，每日擦患处3次，每次用力擦5分钟。<br/>82、 手气、脚气：生大蒜头两只，去皮放入半斤醋内泡3天，再用大蒜头擦患处，每日3次。连用7-10日，有消炎和杀死细菌之特效。<br/>83、 手汗、脚汗太多：明矾*5钱、热水2斤，一起溶化浸手脚、一次10分钟、浸后让其自然凉干，一日一次，5天后手脚汗正常。<br/>84、 手足开裂、粗糙：生猪油二两，加白糖1钱。捣匀擦手脚，一日2-3次。一般7天克愈，再擦几天以后永不复发。<br/>85、 冻疮未破：尖头辣椒5钱，白酒或酒精半斤一起放入瓶内浸3天后，在冻疮初起，皮肤红肿发热时涂患处，一日五次，有特效，连用十天至半月痊愈除根，来年永不再发。<br/>86、 冻疮已破：陈旧棉花（越陈旧越好）烧成灰，用麻油调匀涂患处，一日三次。<br/>87、 鹅掌风、灰指甲：醋1斤熬至半斤，加入去皮大蒜头一只，二日后用醋每天浸手二次，一次10分钟，浸后再用清水洗净，7天即可。<br/>88、 疮、疔、疖：用生土豆捣烂，涂患处用布包好，日换一次，一般5天即可。<br/>89、 鸡眼、侯子：先将患处外部老皮消去，再涂上清凉油，用香烟火熏烤，至疼时稍坚持后拿掉烟火，一日二次，5天可脱落不发。<br/>90、 烫伤：可选用蛋清、白糖水、醋、蜂蜜、在烫伤时马上涂伤处，就不会起泡又易好。<br/>91、 流火、丹毒（多患于下肢、皮肤红、肿、热痛并伴有寒战、高热、头痛）：用鲜丝瓜叶汁拌金黄散*成糊状，外涂患处，内服三妙丸*中成药有奇效。<br/>92、 蚊虫咬伤（红肿、痒）：可选用大蒜、生姜擦或用醋、牙膏、盐水、香烟灰加水调匀涂，均可立即见效止痒、解毒消肿。&nbsp;&nbsp;<br/><br/>五、妇科、男性科<br/>93、 妇女白带（白带多、有异味）：生鸡蛋一只，从一头敲一小洞，将7粒白胡椒装入蛋内，用纸封好蒸熟，去胡椒吃蛋，每日一只，连吃一星期，忌吃猪血、绿豆。<br/>94、 月经不调（来经提前或推迟均在7天以上）：干藕节半斤，炒黄研成粉，白酒送服，一日三次，一次2钱，服完即可每月来经。<br/>95、 血崩（月经量太多）：黑木耳3两，炒干研成粉，红糖水送服，一次3钱，一日二次。<br/>96、 闭经（少女18岁后和非怀孕妇女二月以上不来月经）：茄子切片晒干，炒黄研成粉。黄酒送服，一日二次，一次5钱，十天可愈。<br/>97、 通经（来经时腹痛）：用丝瓜筋一次一两，烧一碗汤服，一日二次，7天痊愈。<br/>98、 外阴痒：葱白连根一两，花椒10粒，一起煎水一碗，洗阴部，每天二次，共洗3天。<br/>99、 产后缺乳：莴苣籽*5钱，煎汤一碗，加白糖一次服下，一日二次，5天后乳汁充足。<br/>100、 产前知男女：将孕妇清晨第一次小便滴入两滴医用酒精，变红者为男，无变化为女。<br/>101、 女不孕：生鸡蛋一只开一小孔，放入红花*0.5钱左右，再蒸熟吃蛋，每天一只，连吃一个月，（要在月经干净后开始吃）。<br/>102、 子宫、卵巢肿瘤：红花6克、黑豆30克，水煎服，去红花食黑豆与汤，日2次。<br/>103、 男不育：每天用麻雀一只，去掉毛和内脏，将菟丝籽*2钱放入麻雀肚内，包好蒸熟后吃麻雀，连用半月，可治男子婚后久不生育。<br/>104、 阳痿（男子阳茎不能勃起）：磁石（吸铁石）5钱，公鸡睾丸5只，浸白酒一斤，三日后按常日量吃酒，一般需吃半至一月。（磁石可反复使用）。如不吃酒人，每日炒二只公鸡睾丸吃，连吃半月至一月，完全恢复性功能。<br/>105、 遗精（睡觉做梦流精）：猪腰子一个，切开放入韭菜籽*2钱，用线扎好蒸熟，再切碎加油盐吃，一日一个，连吃四、五个腰子。<br/>106、 早泄（男子在房事时过早射精）：韭菜籽*半斤炎黄，用黄酒送服，一次2钱，一日三次，服完即痊愈。<br/>107、 小肠气：食盐半斤炒热，加入花椒20粒，用布包好，敷患处至盐凉，一日一次，最好睡前用，连用4、5天有特效。<br/>108、 男子性功能减退（不属于阳痿，只是性功能减弱力不重心，多见于年老体弱者，也有房事过度引起的）：活大青虾或白虾一两，白酒1斤、浸5天后按常日酒量吃酒，酒完后将虾炒吃。连用半月，有补阴壮阳、补充男性激素、增强性机能之功效。<br/>109、 前列腺炎：麝香0.5克，白胡椒7粒，研成细末，装瓶备用。将脐用酒精洗净，将麝香放入肚脐内，再将胡椒粉盖在上面，后盖圆白纸一张，外用胶布贴紧，每隔7-10日换药1次，10次为1疗程。<br/>110、 前列腺肥大：冬瓜籽*30克、黑木耳15克、秦皮*15克，水煎服，日2次。 <br/><br/><br/>附：防病保健知识（二）<br/>1、 怎样防止脱发？1）勤洗头，勿用碱性肥皂。2）勤梳头，要用梳子。3）忌用化学品染发。4）少吃过辣、过酸。5）常保持精神愉快。<br/>2、 怎样防止面部起皱纹？1）洗脸水宜30-40度。2）经常按摩面部。3）晚上睡前适当涂些营养霜。4）勿长期用单侧牙吃饭。5）枕头勿太高。6）少做以下动作：托腮、挖鼻孔、剔牙、咬嘴唇、吹口哨、斜眼歪嘴、用吸管吸饮料。<br/>3、 怎样防止失眠？睡前少讲太多话，忌饮浓茶、睡前勿用脑、用热水加醋洗脚。<br/>4、 妇女经期有六忌：忌寒冷着凉、忌吃浓茶、过辣，忌饮冷食、忌盆浴和游泳、忌同房、忌过度疲劳。<br/>5、 怎样才能生一个智力较高的宝宝？1）晚婚晚育。2）孕妇忌吃辣。3）孕妇常保持乐观心情。4）孕妇和哺乳期妇女忌饮可乐饮料和咖啡浓茶，因这些饮料中含有咖啡因，咖啡因能诱发后代畸形和损伤胎儿脑力。<br/>6、 怎样使孩子更聪明？科学研究证明，如果让孩子常吃鹅蛋、鸽蛋、鱼头，就会更聪明。<br/>7、 哪些人不能睡午觉？经常失眠和体重超标准或65岁以上的人，心脏病和心肌梗塞的病人。<br/>8、 哪些病人不能过性生活？患有传染病、性病、大病初愈或病中、妇女产前产后或经期，心脏病、高血压、肝炎、肾炎、肿瘤病人。<br/>9、 哪些人不能吃糖？胃病、肾病、高血压、高血脂、糖尿病、肝炎、神经衰弱等病人。<br/>10、老年保健有九忌：忌过饱、过甜、过咸、厚腻、烟酒、大喜大怒、久蹲、懒散、便秘。<br/>11、哪些人不宜吃啤酒？胃炎及溃疡病人、哺乳期妇女、秘尿系统结石和肝病人、儿童。<br/>12、哪些人不宜吃螃蟹？发热、胃病及溃疡、肝炎、腹泻、胆囊炎、胆结石等病人。<br/>13、儿童生活有哪四不宜？不宜戴有色镜、不宜睡弹簧床、不宜穿高跟鞋、不宜烫发。<br/>14、用矮桌进食有啥害？积食滞气、影响消化。<br/>15、按电器开关或拿插头为什么最好用右手？因人的心脏在左侧，如遇漏电时用左手极危险。 <br/><br/>民间实用土方（下）<br/>六、五官科<br/>111、 牙痛（神经性、过敏性、蛀牙痛均可）：花椒10粒，白酒一两，将花椒浸在酒内，十分钟后用酒口含，几分钟即见效，一日2次每次10分钟，3-4天痊愈。<br/>112、 牙周炎、牙龈炎：用一只鸡蛋清加等量白酒搅匀喝一口，含口中，5分钟后吐掉，一日二次（一日一只蛋），2-3天消炎止痛。<br/>113、 牙出血（经常出血或刷牙引起）：花椒10粒，醋三两，浸2天后口含，一次3分钟，一日2次，连用5天有特效。<br/>114、 电光性红眼病：用人乳滴入眼内，闭眼10分钟，一日二次，一次二滴，有特效，忌辣。<br/>115、 结膜炎（非电光红眼病）：用绿茶水，每日洗眼3-5次，一般2-3天有消炎抗菌之功效。忌吃酒、辣物。<br/>116、 流泪眼、沙眼：干桑叶*1两，加一碗水烧开、每日洗眼3-5次，连用一星期。<br/>117、 视力衰退（老光、老花、视物不清）：白菊花*2钱，枸杞子*2钱，每日用开水泡饮（一剂可泡三遍），连饮半至一月，有清水明目之功效。忌吃辣物、海带。<br/>118、 偷针眼：用缝衣针的针鼻部反复摩擦患处，并稍用力挤压，每日2-3次，不出二日即可治愈。<br/>119、 白内障（晶状浑浊、使视力下降）：白蒺藜*250克，羊肝250克，白糖200克，研为末，每次服15克，日服2次，8周见效。<br/>120、 青光眼（眼球内压力太高，角膜水肿或呈雾状，视力下降）：猪眼一付，加绿豆一两煮熟，再加油、盐适量，每日吃一剂，连吃半月，能使眼内轻松，眼睛明亮。<br/>121、 中耳炎（耳内长期流水、流浓、胀痛）：鲜韭菜汁5钱，加入明矾半钱，溶化后滴入耳内，一次1-2滴，一日2次，连用5天。<br/>122、 耳鸣、耳聋：当归*15 钱，黑豆30克，红糖30克，水煎服，日2次，2周见效。菊花*30克，芦根*30克，冬瓜皮*30克，水煎服，每日2次，2周见效。<br/>123、 虫入耳：用猫尿一滴，滴入耳内，虫子会自动出来。（提取猫尿法：用大瓣大蒜头，去皮擦猫鼻子，猫即撒尿）。<br/>124、 口疮（又叫羊胡疮，在口内叫口腔溃疡）：醋、蒸馏水等量搅匀，涂患处，一日5次，连用2-3天，可消炎止痛，效果极佳。<br/>125、 咽喉痛（咽部干燥疼痛、有异物感，急、慢性均可）：用绿茶叶泡浓茶约2两水量，加入半两蜂蜜搅匀，每日分几次漱喉并慢咽下，每日一剂，连用3-5天，消炎镇痛，湿润咽喉，治急、慢性咽喉炎。忌吃烟、酒，一切有刺激性食物。<br/>126、 扁桃体炎（嗓子二侧发起红肿、痛、一般多发于着凉后）：黑木耳一两，炒干研成粉，每次用半调羹粉与蜂蜜调匀口服，一日二次连服5天永不再发（此方在扁桃体炎正在发作时用）。<br/>127、 声音哑（咳嗽、讲话太多、唱歌、内火大等原因引起的音哑）：鸡蛋一只、打入碗内，加醋一条羹、搅匀蒸熟食用，一日一剂，连吃2-3天，声音响亮。忌辣。<br/>128、 口臭：芦根*（鲜、干均可）一两，煎汤一碗加冰糖适量内服，一日一次，早晨空服，连服一星期。清火解毒，治内热胃火。<br/>129、 鱼刺卡喉：较轻者用好醋喝一口即可。如果不行，可用鸭口水一调羹喝下，鱼刺可自动化掉。（取鸭口水法：用一片生姜，放入鸭嘴内，再将鸭倒吊，鸭即流口水）。<br/>130、 鼻炎（包括过敏性、萎缩性和鼻窦炎，有的流脓流水、鼻涕多、有的闻味不灵敏）：用黄砖一块，放火上烧烫，取下，将一调羹醋倒在热砖上，此时有大量热气上冒，患者用鼻闻其热气，一日二次，连用7天，消热、消炎，解毒通窍，治各类鼻炎，有特效。<br/>131、 流鼻血：藕节*、芦根*等量，一起切碎，煎一碗水一次喝下，一日二次，连用5日，清热止血，永不复发。 <br/><br/>七 、美容<br/>132、 除面部皱纹:鲜黄瓜汁二调羹,加入等量鸡蛋清(约一只蛋)搅匀,每晚睡前先洗脸,再涂抹面部皱纹处,次日晨用温水洗净,连用半至一月,能使皮肤逐渐收缩,消除皱纹有特效.<br/>133、 皮肤粗黑:靠化妆品增白皮肤,只能一时掩饰,治表不治本,现向你介绍一种治表治本能使皮肤增白而真白的妙方,既简单又有特效:用白醋\甘油按5:1混合, 常擦皮肤(一日二\三次)能使皮肤湿润,减少黑色素沉积,一月后皮肤即细腻白嫩,洁净光滑富有弹性,充满美感。(此方对遗传黑皮肤均有效).<br/>134、 除雀斑:杏仁*5钱,研成细粉,用鸡蛋清调匀,每晚睡前涂面部,次日清晨用温水洗去,一日一次,10-15日显效,以后不发.<br/>135、 黄褐班\蝴蝶斑:冬瓜汁\白醋等量,调匀涂面部,一日2-3次,涂后过10分钟洗去.连用半月即可除净.<br/>136、 除面部色素斑:鲜西红柿汁\蜂蜜,按5:1混合,涂面部,过10分钟后洗净,连用10-15日,能使黑色素分解,皮肤变白红润.<br/>137、 除粉刺(酒刺\青春豆\座疮):鲜黄瓜汁\白醋等量调匀,先用热水洗脸后再涂脸,一日三次,涂后过10分钟用温水洗去,连用半月可愈,以后不老.<br/>138、 除黑痣:花生仁烧焦捣碎,用酒精调匀,涂痣上,每晚睡前涂上并包好,次日晨洗去,连用半月可除,(大痣需涂一月).<br/>139、 脱发\头屑\头痒:每次用桑树根皮*4钱,水二斤,烧开洗头,一日一次,洗后勿用清水过头连用5天,能促进头皮血液循环,有固发作用,并治头屑\头痒,可再生发.<br/>140、 斑秃\秃顶:按134条使用,并用老姜片每日擦头皮3-5次,与134条同用半月,以后不出一两月便会重新长出一头浓发.<br/>141、 头发增亮:啤酒\醋按2:1混合.每日用毛巾吸湿再涂头发一次,连用半月.<br/>142、 白发变黑:何首乌*\黑芝麻各三两,一起炒干研碎,用白糖水调服,每次3钱,一日一次,连服半月,可补肾健发.忌蚕豆.<br/>143、 减肥:干荷叶*\干冬瓜皮*按1:2配好,每日用一两泡一斤左右热水喝,有去厚腻\刮油手之功效,忌肥肉.<br/>144、 瘦人增胖:鸡蛋二只,打在碗内,加生番茄汁一调羹和适量白糖,用等量开水冲成半熟食用,每日一次,早晨空服(也可吃稀黄荷包蛋)连吃一月,以后会逐渐变胖.<br/>145、 牙变白:用食盐\小苏打等量,加入调成牙膏状,每日刷牙一次,3-4天可除牙齿表层所有色斑,使牙齿洁白.<br/>146、 除汗毛\胡须(多毛症):旧电池粉\碱粉等量,用医用酒精调匀,过5分钟即可自动洗去,一日一次,5-7天后汗毛\胡须即可自动脱落,以后不会再发,此方对皮肤无过敏,无刺激,无任何副作用. <br/><br/>&nbsp;&nbsp;<br/>八、食物相克<br/>两小时内不可同吃，摘于有关保健书刊。<br/>1、 鸡蛋忌糖精?-同食中毒、死亡<br/>2、 豆腐忌蜂蜜?-同食耳聋<br/>3、 海带忌猪血—同食便秘<br/>4、 土豆忌香蕉—同食生雀斑<br/>5、 牛肉忌红糖—同食胀死人<br/>6、 狗肉忌黄鳝—同食则死<br/>7、 羊肉忌田螺—同食积食腹胀<br/>8、 芹菜忌兔肉—同食脱头发<br/>9、 番茄忌绿豆—同食伤元气<br/>10、 螃蟹忌柿子—同食腹泻<br/>11、 鹅肉忌鸭梨—同食伤肾脏<br/>12、 洋葱忌蜂蜜—同食伤眼睛<br/>13、 黑鱼忌茄子—同食肚子痛<br/>14、 甲鱼忌苋菜—同食中毒<br/>15、 皮蛋忌红糖—同食发呕<br/>16、 人参忌萝卜—同食积食滞气<br/>17、 白酒积柿子—同食心闷 <br/>附：防病保健知识（三） <br/>1、饮茶有那些好处？振精神、增记忆、除疲劳、抗肿瘤、抗衰老、助减肥。<br/>2、哪种茶的保健功能最强？排列顺序是：绿茶、花茶、红茶。<br/>3、哪些人不宜饮茶？孕妇、妇女经期及浦乳期、患失眠、便秘、贫血、溃疡病、肝病、高血压、发热病人和献血后的人，均不宜饮茶。<br/>4、 饮茶有哪十忌？忌空腹饮茶、烫茶、冷茶、浓茶、睡前饮茶、早起饮茶、饭后立即饮茶，冲泡时期过长的茶，饭前饮茶和茶水服药。<br/>5、隔夜茶能不能饮？隔夜茶经过长时间浸泡，不仅完全无营养，而且还会繁殖许多有害细菌，如饮用易伤脾胃，所以最好不饮。<br/>6、一年四季如何选择茶种？春宜花茶、夏宜绿茶、秋宜青茶、冬宜红茶。<br/>7、 新茶好还是陈茶好？俗话说“酒越陈越香，茶越陈越次”，陈茶易回潮霉变和被虫卵等污染，所以还是饮新茶为好。<br/>8、 酒后饮茶好不好？人饮酒后酒精在人的肝脏中转化为乙醇，与茶叶中的茶碱迅速进入肾赃，对肾脏刺激太大，会损伤肾功能。<br/>9、 茶能解酒吗？据科学研究证明，茶中根本没有分解酒精的成分，况且茶酒同饮还会损伤肾功能，所以酒后切忌饮茶，特别是浓茶。<br/>10、 饮酒有哪八忌？忌过量、忌一饮而尽，忌空腹饮酒、忌掺混酒、忌带病饮酒、忌酒后服药、忌酒后喝浓茶、忌孕妇、儿童饮酒。<br/>11、 为什么早晨不能吃酒？因为人从早晨6点钟开始，体内的醚逐渐上升，到早晨8点到达高峰，此时饮酒，酒精与醚结合，会使人整天感到疲倦。<br/>12、 喝醉酒怎样解？用手指和筷子反复触摸咽喉部，使其呕吐，再喝几碗水，再吐，起洗胃作用；可选用醋开水，苏打水喝下。<br/>13、哪些人不宜饮酒？胃病、泌尿系统结石、肝病、孕妇和儿童均不宜饮白酒、黄酒和啤酒。<br/>14、儿童饮酒有何害？伤肝、伤肾 <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/128.htm</link>
			<title><![CDATA[C# 中的委托和事件]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Sat,05 Dec 2009 10:29:51 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=128</guid>
		<description><![CDATA[引言<br/>委托 和 事件在 .Net Framework中的应用非常广泛，然而，较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿，过了这个槛的人，觉得真是太容易了，而没有过去的人每次见到委托和事件就觉得心里别（biè）得慌，混身不自在。本文中，我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义，对它们的中间代码也做了讨论。<br/><br/>将方法作为方法的参数<br/>我们先不管这个标题如何的绕口，也不管委托究竟是个什么东西，来看下面这两个最简单的方法，它们不过是在屏幕上输出一句问候的话语：<br/><br/>public void GreetPeople(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 做某些额外的事情，比如初始化之类，此处略<br/>&nbsp;&nbsp;&nbsp;&nbsp;EnglishGreeting(name);<br/>}<br/>public void EnglishGreeting(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Morning, &#34; + name);<br/>}<br/><br/>暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好，当我们传递代表某人姓名的name参数，比如说“Jimmy”，进去的时候，在这个方法中，将调用EnglishGreeting方法，再次传递name参数，EnglishGreeting则用于向屏幕输出 “Morning, Jimmy”。<br/><br/>现在假设这个程序需要进行全球化，哎呀，不好了，我是中国人，我不明白“Morning”是什么意思，怎么办呢？好吧，我们再加个中文版的问候方法：<br/><br/>public void ChineseGreeting(string name){<br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;早上好, &#34; + name);<br/>}<br/><br/>这时候，GreetPeople也需要改一改了，不然如何判断到底用哪个版本的Greeting问候方法合适呢？在进行这个之前，我们最好再定义一个枚举作为判断的依据：<br/><br/>public enum Language{<br/>&nbsp;&nbsp;&nbsp;&nbsp;English, Chinese<br/>}<br/><br/>public void GreetPeople(string name, Language lang){<br/>&nbsp;&nbsp;&nbsp;&nbsp;//做某些额外的事情，比如初始化之类，此处略<br/>&nbsp;&nbsp;&nbsp;&nbsp;swith(lang){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case Language.English:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EnglishGreeting(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Language.Chinese:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChineseGreeting(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>OK，尽管这样解决了问题，但我不说大家也很容易想到，这个解决方案的可扩展性很差，如果日后我们需要再添加韩文版、日文版，就不得不反复修改枚举和GreetPeople()方法，以适应新的需求。<br/><br/>在考虑新的解决方案之前，我们先看看 GreetPeople的方法签名：<br/><br/>public void GreetPeople(string name, Language lang)<br/><br/>我们仅看 string name，在这里，string 是参数类型，name 是参数变量，当我们赋给name字符串“jimmy”时，它就代表“jimmy”这个值；当我们赋给它“张子阳”时，它又代表着“张子阳”这个值。然后，我们可以在方法体内对这个name进行其他操作。哎，这简直是废话么，刚学程序就知道了。<br/><br/>如果你再仔细想想，假如GreetPeople()方法可以接受一个参数变量，这个变量可以代表另一个方法，当我们给这个变量赋值 EnglishGreeting的时候，它代表着 EnglsihGreeting() 这个方法；当我们给它赋值ChineseGreeting 的时候，它又代表着ChineseGreeting()方法。我们将这个参数变量命名为 MakeGreeting，那么不是可以如同给name赋值时一样，在调用 GreetPeople()方法的时候，给这个MakeGreeting 参数也赋上值么(ChineseGreeting或者EnglsihGreeting等)？然后，我们在方法体内，也可以像使用别的参数一样使用MakeGreeting。但是，由于MakeGreeting代表着一个方法，它的使用方式应该和它被赋的方法(比如ChineseGreeting)是一样的，比如：<br/><br/>MakeGreeting(name);<br/><br/>好了，有了思路了，我们现在就来改改GreetPeople()方法，那么它应该是这个样子了：<br/><br/>public void GreetPeople(string name, *** MakeGreeting){<br/>&nbsp;&nbsp;&nbsp;&nbsp;MakeGreeting(name);<br/>}<br/><br/>注意到 *** ，这个位置通常放置的应该是参数的类型，但到目前为止，我们仅仅是想到应该有个可以代表方法的参数，并按这个思路去改写GreetPeople方法，现在就出现了一个大问题：这个代表着方法的MakeGreeting参数应该是什么类型的？<br/><br/>NOTE：这里已不再需要枚举了，因为在给MakeGreeting赋值的时候动态地决定使用哪个方法，是ChineseGreeting还是 EnglishGreeting，而在这个两个方法内部，已经对使用“morning”还是“早上好”作了区分。<br/><br/>聪明的你应该已经想到了，现在是委托该出场的时候了，但讲述委托之前，我们再看看MakeGreeting参数所能代表的 ChineseGreeting()和EnglishGreeting()方法的签名：<br/><br/>public void EnglishGreeting(string name)<br/>public void ChineseGreeting(string name)<br/><br/>如同name可以接受String类型的“true”和“1”，但不能接受bool类型的true和int类型的1一样。MakeGreeting的 参数类型定义 应该能够确定 MakeGreeting可以代表的方法种类，再进一步讲，就是MakeGreeting可以代表的方法 的 参数类型和返回类型。<br/><br/>于是，委托出现了：它定义了MakeGreeting参数所能代表的方法的种类，也就是MakeGreeting参数的类型。<br/><br/>NOTE：如果上面这句话比较绕口，我把它翻译成这样：string 定义了name参数所能代表的值的种类，也就是name参数的类型。<br/><br/>本例中委托的定义：<br/><br/>public delegate void GreetingDelegate(string name);<br/><br/>可以与上面EnglishGreeting()方法的签名对比一下，除了加入了delegate关键字以外，其余的是不是完全一样？<br/><br/>现在，让我们再次改动GreetPeople()方法，如下所示：<br/><br/>public void GreetPeople(string name, GreetingDelegate MakeGreeting){<br/>&nbsp;&nbsp;&nbsp;&nbsp;MakeGreeting(name);<br/>}<br/><br/>如你所见，委托GreetingDelegate出现的位置与 string相同，string是一个类型，那么GreetingDelegate应该也是一个类型，或者叫类(Class)。但是委托的声明方式和类却完全不同，这是怎么一回事？实际上，委托在编译的时候确实会编译成类。因为Delegate是一个类，所以在任何可以声明类的地方都可以声明委托。更多的内容将在下面讲述，现在，请看看这个范例的完整代码：<br/><br/>using System;<br/>using System.Collections.Generic;<br/>using System.Text;<br/><br/>namespace Delegate {<br/>&nbsp;&nbsp;&nbsp;&nbsp; //定义委托，它定义了可以代表的方法的类型<br/>&nbsp;&nbsp;&nbsp;&nbsp; public delegate void GreetingDelegate(string name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class Program {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void EnglishGreeting(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Morning, &#34; + name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void ChineseGreeting(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;早上好, &#34; + name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注意此方法，它接受一个GreetingDelegate类型的方法作为参数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MakeGreeting(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GreetPeople(&#34;Jimmy Zhang&#34;, EnglishGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GreetPeople(&#34;张子阳&#34;, ChineseGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>输出如下：<br/>Morning, Jimmy Zhang<br/>早上好, 张子阳<br/><br/>我们现在对委托做一个总结：<br/><br/>委托是一个类，它定义了方法的类型，使得可以将方法当作另一个方法的参数来进行传递，这种将方法动态地赋给参数的做法，可以避免在程序中大量使用If-Else(Switch)语句，同时使得程序具有更好的可扩展性。<br/><br/>将方法绑定到委托<br/>看到这里，是不是有那么点如梦初醒的感觉？于是，你是不是在想：在上面的例子中，我不一定要直接在GreetPeople()方法中给 name参数赋值，我可以像这样使用变量：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;string name1, name2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;name1 = &#34;Jimmy Zhang&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;name2 = &#34;张子阳&#34;; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; GreetPeople(name1, EnglishGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp; GreetPeople(name2, ChineseGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>}<br/><br/>而既然委托GreetingDelegate 和 类型 string 的地位一样，都是定义了一种参数类型，那么，我是不是也可以这么使用委托？<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingDelegate delegate1, delegate2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 = EnglishGreeting;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate2 = ChineseGreeting;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetPeople(&#34;Jimmy Zhang&#34;, delegate1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GreetPeople(&#34;张子阳&#34;, delegate2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>}<br/><br/>如你所料，这样是没有问题的，程序一如预料的那样输出。这里，我想说的是委托不同于string的一个特性：可以将多个方法赋给同一个委托，或者叫将多个方法绑定到同一个委托，当调用这个委托的时候，将依次调用其所绑定的方法。在这个例子中，语法如下：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingDelegate delegate1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 = EnglishGreeting; // 先给委托类型的变量赋值<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 += ChineseGreeting;&nbsp;&nbsp; // 给此委托变量再绑定一个方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetPeople(&#34;Jimmy Zhang&#34;, delegate1);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>}<br/><br/>输出为：<br/>Morning, Jimmy Zhang<br/>早上好, Jimmy Zhang<br/><br/>实际上，我们可以也可以绕过GreetPeople方法，通过委托来直接调用EnglishGreeting和ChineseGreeting：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingDelegate delegate1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 = EnglishGreeting; // 先给委托类型的变量赋值<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 += ChineseGreeting;&nbsp;&nbsp; // 给此委托变量再绑定一个方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 (&#34;Jimmy Zhang&#34;);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>}<br/><br/> <br/><br/>NOTE：这在本例中是没有问题的，但回头看下上面GreetPeople()的定义，在它之中可以做一些对于EnglshihGreeting和ChineseGreeting来说都需要进行的工作，为了简便我做了省略。<br/><br/>注意这里，第一次用的“=”，是赋值的语法；第二次，用的是“+=”，是绑定的语法。如果第一次就使用“+=”，将出现“使用了未赋值的局部变量”的编译错误。<br/><br/>我们也可以使用下面的代码来这样简化这一过程：<br/><br/>GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);<br/>delegate1 += ChineseGreeting;&nbsp;&nbsp; // 给此委托变量再绑定一个方法<br/><br/>看到这里，应该注意到，这段代码第一条语句与实例化一个类是何其的相似，你不禁想到：上面第一次绑定委托时不可以使用“+=”的编译错误，或许可以用这样的方法来避免：<br/><br/>GreetingDelegate delegate1 = new GreetingDelegate();<br/>delegate1 += EnglishGreeting;&nbsp;&nbsp; // 这次用的是 “+=”，绑定语法。<br/>delegate1 += ChineseGreeting;&nbsp;&nbsp; // 给此委托变量再绑定一个方法<br/><br/>但实际上，这样会出现编译错误： “GreetingDelegate”方法没有采用“0”个参数的重载。尽管这样的结果让我们觉得有点沮丧，但是编译的提示：“没有0个参数的重载”再次让我们联想到了类的构造函数。我知道你一定按捺不住想探个究竟，但再此之前，我们需要先把基础知识和应用介绍完。<br/><br/>既然给委托可以绑定一个方法，那么也应该有办法取消对方法的绑定，很容易想到，这个语法是“-=”：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 += ChineseGreeting;&nbsp;&nbsp; // 给此委托变量再绑定一个方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetPeople(&#34;Jimmy Zhang&#34;, delegate1);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 -= EnglishGreeting; //取消对EnglishGreeting方法的绑定<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 将仅调用 ChineseGreeting <br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetPeople(&#34;张子阳&#34;, delegate1); <br/>&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>}<br/>输出为：<br/>Morning, Jimmy Zhang<br/>早上好, Jimmy Zhang<br/>早上好, 张子阳<br/><br/>让我们再次对委托作个总结：<br/><br/>使用委托可以将多个方法绑定到同一个委托变量，当调用此变量时(这里用“调用”这个词，是因为此变量代表一个方法)，可以依次调用所有绑定的方法。<br/><br/>事件的由来<br/>我们继续思考上面的程序：上面的三个方法都定义在Programe类中，这样做是为了理解的方便，实际应用中，通常都是 GreetPeople 在一个类中，ChineseGreeting和 EnglishGreeting 在另外的类中。现在你已经对委托有了初步了解，是时候对上面的例子做个改进了。假设我们将GreetingPeople()放在一个叫GreetingManager的类中，那么新程序应该是这个样子的：<br/><br/>namespace Delegate {<br/>&nbsp;&nbsp;&nbsp;&nbsp;//定义委托，它定义了可以代表的方法的类型<br/>&nbsp;&nbsp;&nbsp;&nbsp;public delegate void GreetingDelegate(string name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//新建的GreetingManager类<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class GreetingManager{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void GreetPeople(string name, GreetingDelegate MakeGreeting) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MakeGreeting(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void EnglishGreeting(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Morning, &#34; + name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static void ChineseGreeting(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;早上好, &#34; + name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ... ...<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>这个时候，如果要实现前面演示的输出效果，Main方法我想应该是这样的：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingManager gm = new&nbsp;&nbsp;GreetingManager();<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;Jimmy Zhang&#34;, EnglishGreeting);<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;张子阳&#34;, ChineseGreeting);<br/>}<br/><br/>我们运行这段代码，嗯，没有任何问题。程序一如预料地那样输出了：<br/><br/>Morning, Jimmy Zhang<br/><br/>早上好, 张子阳<br/><br/>现在，假设我们需要使用上一节学到的知识，将多个方法绑定到同一个委托变量，该如何做呢？让我们再次改写代码：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingManager gm = new&nbsp;&nbsp;GreetingManager();<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingDelegate delegate1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 = EnglishGreeting;<br/>&nbsp;&nbsp;&nbsp;&nbsp;delegate1 += ChineseGreeting;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;Jimmy Zhang&#34;, delegate1);<br/>}<br/><br/>输出：<br/>Morning, Jimmy Zhang<br/>早上好, Jimmy Zhang<br/><br/>到了这里，我们不禁想到：面向对象设计，讲究的是对象的封装，既然可以声明委托类型的变量(在上例中是delegate1)，我们何不将这个变量封装到 GreetManager类中？在这个类的客户端中使用不是更方便么？于是，我们改写GreetManager类，像这样：<br/><br/>public class GreetingManager{<br/>&nbsp;&nbsp;&nbsp;&nbsp;//在GreetingManager类的内部声明delegate1变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;public GreetingDelegate delegate1;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void GreetPeople(string name, GreetingDelegate MakeGreeting) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MakeGreeting(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>现在，我们可以这样使用这个委托变量：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingManager gm = new&nbsp;&nbsp;GreetingManager();<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.delegate1 = EnglishGreeting;<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.delegate1 += ChineseGreeting;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;Jimmy Zhang&#34;, gm.delegate1);<br/>}<br/><br/>输出为：<br/>Morning, Jimmy Zhang<br/>早上好, Jimmy Zhang<br/><br/>尽管这样做没有任何问题，但我们发现这条语句很奇怪。在调用gm.GreetPeople方法的时候，再次传递了gm的delegate1字段：<br/><br/>gm.GreetPeople(&#34;Jimmy Zhang&#34;, gm.delegate1);<br/><br/>既然如此，我们何不修改 GreetingManager 类成这样：<br/><br/>public class GreetingManager{<br/>&nbsp;&nbsp;&nbsp;&nbsp;//在GreetingManager类的内部声明delegate1变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;public GreetingDelegate delegate1;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void GreetPeople(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(delegate1!=null){&nbsp;&nbsp;&nbsp;&nbsp; //如果有方法注册委托变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate1(name);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//通过委托调用方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>在客户端，调用看上去更简洁一些：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingManager gm = new&nbsp;&nbsp;GreetingManager();<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.delegate1 = EnglishGreeting;<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.delegate1 += ChineseGreeting;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;Jimmy Zhang&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//注意，这次不需要再传递 delegate1变量<br/>}<br/><br/>输出为：<br/>Morning, Jimmy Zhang<br/>早上好, Jimmy Zhang<br/><br/>尽管这样达到了我们要的效果，但是还是存在着问题：<br/><br/>在这里，delegate1和我们平时用的string类型的变量没有什么分别，而我们知道，并不是所有的字段都应该声明成public，合适的做法是应该public的时候public，应该private的时候private。<br/><br/>我们先看看如果把 delegate1 声明为 private会怎样？结果就是：这简直就是在搞笑。因为声明委托的目的就是为了把它暴露在类的客户端进行方法的注册，你把它声明为private了，客户端对它根本就不可见，那它还有什么用？<br/><br/>再看看把delegate1 声明为 public 会怎样？结果就是：在客户端可以对它进行随意的赋值等操作，严重破坏对象的封装性。<br/><br/>最后，第一个方法注册用“=”，是赋值语法，因为要进行实例化，第二个方法注册则用的是“+=”。但是，不管是赋值还是注册，都是将方法绑定到委托上，除了调用时先后顺序不同，再没有任何的分别，这样不是让人觉得很别扭么？<br/><br/>现在我们想想，如果delegate1不是一个委托类型，而是一个string类型，你会怎么做？答案是使用属性对字段进行封装。<br/><br/>于是，Event出场了，它封装了委托类型的变量，使得：在类的内部，不管你声明它是public还是protected，它总是private的。在类的外部，注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。<br/><br/>我们改写GreetingManager类，它变成了这个样子：<br/><br/>public class GreetingManager{<br/>&nbsp;&nbsp;&nbsp;&nbsp;//这一次我们在这里声明一个事件<br/>&nbsp;&nbsp;&nbsp;&nbsp;public event GreetingDelegate MakeGreet;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void GreetPeople(string name) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeGreet(name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>很容易注意到：MakeGreet 事件的声明与之前委托变量delegate1的声明唯一的区别是多了一个event关键字。看到这里，在结合上面的讲解，你应该明白到：事件其实没什么不好理解的，声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。<br/><br/>为了证明上面的推论，如果我们像下面这样改写Main方法：<br/><br/>static void Main(string[] args) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;GreetingManager gm = new&nbsp;&nbsp;GreetingManager();<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.MakeGreet = EnglishGreeting;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 编译错误1<br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.MakeGreet += ChineseGreeting;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;gm.GreetPeople(&#34;Jimmy Zhang&#34;);<br/>}<br/><br/>会得到编译错误：事件“Delegate.GreetingManager.MakeGreet”只能出现在 += 或 -= 的左边(从类型“Delegate.GreetingManager”中使用时除外)。<br/><br/>事件和委托的编译代码<br/>这时候，我们注释掉编译错误的行，然后重新进行编译，再借助Reflactor来对 event的声明语句做一探究，看看为什么会发生这样的错误：<br/><br/>public event GreetingDelegate MakeGreet;<br/><br/><br/><br/>可以看到，实际上尽管我们在GreetingManager里将 MakeGreet 声明为public，但是，实际上MakeGreet会被编译成 私有字段，难怪会发生上面的编译错误了，因为它根本就不允许在GreetingManager类的外面以赋值的方式访问，从而验证了我们上面所做的推论。<br/><br/>我们再进一步看下MakeGreet所产生的代码：<br/><br/>private GreetingDelegate MakeGreet; //对事件的声明 实际是 声明一个私有的委托变量<br/> <br/>[MethodImpl(MethodImplOptions.Synchronized)]<br/>public void add_MakeGreet(GreetingDelegate value){<br/>&nbsp;&nbsp;&nbsp;&nbsp;this.MakeGreet = (GreetingDelegate) Delegate.Combine(this.MakeGreet, value);<br/>}<br/><br/>[MethodImpl(MethodImplOptions.Synchronized)]<br/>public void remove_MakeGreet(GreetingDelegate value){<br/>&nbsp;&nbsp;&nbsp;&nbsp;this.MakeGreet = (GreetingDelegate) Delegate.Remove(this.MakeGreet, value);<br/>}<br/><br/>现在已经很明确了：MakeGreet事件确实是一个GreetingDelegate类型的委托，只不过不管是不是声明为public，它总是被声明为private。另外，它还有两个方法，分别是add_MakeGreet和remove_MakeGreet，这两个方法分别用于注册委托类型的方法和取消注册。实际上也就是： “+= ”对应 add_MakeGreet，“-=”对应remove_MakeGreet。而这两个方法的访问限制取决于声明事件时的访问限制符。<br/><br/>在add_MakeGreet()方法内部，实际上调用了System.Delegate的Combine()静态方法，这个方法用于将当前的变量添加到委托链表中。我们前面提到过两次，说委托实际上是一个类，在我们定义委托的时候：<br/><br/>public delegate void GreetingDelegate(string name);<br/><br/>当编译器遇到这段代码的时候，会生成下面这样一个完整的类：<br/><br/>public sealed class GreetingDelegate:System.MulticastDelegate{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public GreetingDelegate(object @object, IntPtr method);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public virtual IAsyncResult BeginInvoke(string name, AsyncCallback callback, object @object);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public virtual void EndInvoke(IAsyncResult result);<br/>&nbsp;&nbsp;&nbsp;&nbsp;public virtual void Invoke(string name);<br/>}<br/><br/><br/><br/><br/><br/>关于这个类的更深入内容，可以参阅《CLR Via C#》等相关书籍，这里就不再讨论了。<br/><br/>委托、事件与Observer设计模式<br/>范例说明<br/>上面的例子已不足以再进行下面的讲解了，我们来看一个新的范例，因为之前已经介绍了很多的内容，所以本节的进度会稍微快一些：<br/><br/>假设我们有个高档的热水器，我们给它通上电，当水温超过95度的时候：1、扬声器会开始发出语音，告诉你水的温度；2、液晶屏也会改变水温的显示，来提示水已经快烧开了。<br/><br/>现在我们需要写个程序来模拟这个烧水的过程，我们将定义一个类来代表热水器，我们管它叫：Heater，它有代表水温的字段，叫做temperature；当然，还有必不可少的给水加热方法BoilWater()，一个发出语音警报的方法MakeAlert()，一个显示水温的方法，ShowMsg()。<br/><br/>namespace Delegate {<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Heater {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private int temperature; // 水温<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 烧水<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void BoilWater() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt;= 100; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temperature = i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (temperature &gt; 95) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MakeAlert(temperature);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMsg(temperature);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 发出语音警报<br/>&nbsp;&nbsp;&nbsp;&nbsp;private void MakeAlert(int param) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Alarm：嘀嘀嘀，水已经 {0} 度了：&#34; , param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 显示水温<br/>&nbsp;&nbsp;&nbsp;&nbsp;private void ShowMsg(int param) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Display：水快开了，当前温度：{0}度。&#34; , param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>class Program {<br/>&nbsp;&nbsp;&nbsp;&nbsp;static void Main() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heater ht = new Heater();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ht.BoilWater();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>}<br/><br/>Observer设计模式简介<br/>上面的例子显然能完成我们之前描述的工作，但是却并不够好。现在假设热水器由三部分组成：热水器、警报器、显示器，它们来自于不同厂商并进行了组装。那么，应该是热水器仅仅负责烧水，它不能发出警报也不能显示水温；在水烧开时由警报器发出警报、显示器显示提示和水温。<br/><br/>这时候，上面的例子就应该变成这个样子：&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>// 热水器<br/>public class Heater { <br/>&nbsp;&nbsp;&nbsp;&nbsp;private int temperature;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 烧水<br/>&nbsp;&nbsp;&nbsp;&nbsp;private void BoilWater() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt;= 100; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temperature = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>// 警报器<br/>public class Alarm{<br/>&nbsp;&nbsp;&nbsp;&nbsp;private void MakeAlert(int param) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Alarm：嘀嘀嘀，水已经 {0} 度了：&#34; , param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>// 显示器<br/>public class Display{<br/>&nbsp;&nbsp;&nbsp;&nbsp;private void ShowMsg(int param) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Display：水已烧开，当前温度：{0}度。&#34; , param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>这里就出现了一个问题：如何在水烧开的时候通知报警器和显示器？在继续进行之前，我们先了解一下Observer设计模式，Observer设计模式中主要包括如下两类对象：<br/><br/>Subject：监视对象，它往往包含着其他对象所感兴趣的内容。在本范例中，热水器就是一个监视对象，它包含的其他对象所感兴趣的内容，就是temprature字段，当这个字段的值快到100时，会不断把数据发给监视它的对象。 <br/>Observer：监视者，它监视Subject，当Subject中的某件事发生的时候，会告知Observer，而Observer则会采取相应的行动。在本范例中，Observer有警报器和显示器，它们采取的行动分别是发出警报和显示水温。<br/>在本例中，事情发生的顺序应该是这样的：<br/><br/>警报器和显示器告诉热水器，它对它的温度比较感兴趣(注册)。 <br/>热水器知道后保留对警报器和显示器的引用。 <br/>热水器进行烧水这一动作，当水温超过95度时，通过对警报器和显示器的引用，自动调用警报器的MakeAlert()方法、显示器的ShowMsg()方法。<br/>类似这样的例子是很多的，GOF对它进行了抽象，称为Observer设计模式：Observer设计模式是为了定义对象间的一种一对多的依赖关系，以便于当一个对象的状态改变时，其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。<br/><br/>实现范例的Observer设计模式<br/>我们之前已经对委托和事件介绍很多了，现在写代码应该很容易了，现在在这里直接给出代码，并在注释中加以说明。<br/><br/>using System;<br/>using System.Collections.Generic;<br/>using System.Text;<br/><br/>namespace Delegate {<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 热水器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Heater {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int temperature;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void BoilHandler(int param);&nbsp;&nbsp; //声明委托<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public event BoilHandler BoilEvent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声明事件<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 烧水<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void BoilWater() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt;= 100; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temperature = i;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (temperature &gt; 95) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (BoilEvent != null) { //如果有对象注册<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoilEvent(temperature);&nbsp;&nbsp;//调用所有注册对象的方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 警报器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Alarm {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void MakeAlert(int param) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Alarm：嘀嘀嘀，水已经 {0} 度了：&#34;, param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 显示器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Display {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void ShowMsg(int param) { //静态方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Display：水快烧开了，当前温度：{0}度。&#34;, param);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heater heater = new Heater();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alarm alarm = new Alarm();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.BoilEvent += alarm.MakeAlert;&nbsp;&nbsp;&nbsp;&nbsp;//注册方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.BoilEvent += (new Alarm()).MakeAlert;&nbsp;&nbsp; //给匿名对象注册方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.BoilEvent += Display.ShowMsg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注册静态方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.BoilWater();&nbsp;&nbsp; //烧水，会自动调用注册过对象的方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>输出为：<br/>Alarm：嘀嘀嘀，水已经 96 度了：<br/>Alarm：嘀嘀嘀，水已经 96 度了：<br/>Display：水快烧开了，当前温度：96度。<br/>// 省略...<br/><br/>.Net Framework中的委托与事件<br/>尽管上面的范例很好地完成了我们想要完成的工作，但是我们不仅疑惑：为什么.Net Framework 中的事件模型和上面的不同？为什么有很多的EventArgs参数？<br/><br/>在回答上面的问题之前，我们先搞懂 .Net Framework的编码规范：<br/><br/>委托类型的名称都应该以EventHandler结束。 <br/>委托的原型定义：有一个void返回值，并接受两个输入参数：一个Object 类型，一个 EventArgs类型(或继承自EventArgs)。 <br/>事件的命名为 委托去掉 EventHandler之后剩余的部分。 <br/>继承自EventArgs的类型应该以EventArgs结尾。<br/>再做一下说明：<br/><br/>委托声明原型中的Object类型的参数代表了Subject，也就是监视对象，在本例中是 Heater(热水器)。回调函数(比如Alarm的MakeAlert)可以通过它访问触发事件的对象(Heater)。 <br/>EventArgs 对象包含了Observer所感兴趣的数据，在本例中是temperature。<br/>上面这些其实不仅仅是为了编码规范而已，这样也使得程序有更大的灵活性。比如说，如果我们不光想获得热水器的温度，还想在Observer端(警报器或者显示器)方法中获得它的生产日期、型号、价格，那么委托和方法的声明都会变得很麻烦，而如果我们将热水器的引用传给警报器的方法，就可以在方法中直接访问热水器了。<br/><br/>现在我们改写之前的范例，让它符合 .Net Framework 的规范：<br/><br/>using System;<br/>using System.Collections.Generic;<br/>using System.Text;<br/><br/>namespace Delegate {<br/>&nbsp;&nbsp;&nbsp;&nbsp;// 热水器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Heater {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int temperature;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string type = &#34;RealFire 001&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加型号作为演示<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string area = &#34;China Xian&#34;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加产地作为演示<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //声明委托<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public event BoiledEventHandler Boiled; //声明事件<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 定义BoiledEventArgs类，传递给Observer所感兴趣的信息<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class BoiledEventArgs : EventArgs {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public readonly int temperature;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public BoiledEventArgs(int temperature) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.temperature = temperature;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 可以供继承自 Heater 的类重写，以便继承类拒绝其他对象对它的监视<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual void OnBoiled(BoiledEventArgs e) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Boiled != null) { // 如果有对象注册<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boiled(this, e);&nbsp;&nbsp;// 调用所有注册对象的方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 烧水。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void BoilWater() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt;= 100; i++) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temperature = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (temperature &gt; 95) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//建立BoiledEventArgs 对象。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoiledEventArgs e = new BoiledEventArgs(temperature);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnBoiled(e);&nbsp;&nbsp;// 调用 OnBolied方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 警报器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Alarm {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void MakeAlert(Object sender, Heater.BoiledEventArgs e) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heater heater = (Heater)sender;&nbsp;&nbsp;&nbsp;&nbsp; //这里是不是很熟悉呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //访问 sender 中的公共字段<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Alarm：{0} - {1}: &#34;, heater.area, heater.type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Alarm: 嘀嘀嘀，水已经 {0} 度了：&#34;, e.temperature);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 显示器<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class Display {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void ShowMsg(Object sender, Heater.BoiledEventArgs e) {&nbsp;&nbsp; //静态方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heater heater = (Heater)sender;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Display：{0} - {1}: &#34;, heater.area, heater.type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;Display：水快烧开了，当前温度：{0}度。&#34;, e.temperature);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heater heater = new Heater();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alarm alarm = new Alarm();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.Boiled += alarm.MakeAlert;&nbsp;&nbsp; //注册方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.Boiled += (new Alarm()).MakeAlert;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//给匿名对象注册方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);&nbsp;&nbsp;&nbsp;&nbsp;//也可以这么注册<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.Boiled += Display.ShowMsg;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注册静态方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heater.BoilWater();&nbsp;&nbsp; //烧水，会自动调用注册过对象的方法<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/><br/>输出为：<br/>Alarm：China Xian - RealFire 001:<br/>Alarm: 嘀嘀嘀，水已经 96 度了：<br/>Alarm：China Xian - RealFire 001:<br/>Alarm: 嘀嘀嘀，水已经 96 度了：<br/>Alarm：China Xian - RealFire 001:<br/>Alarm: 嘀嘀嘀，水已经 96 度了：<br/>Display：China Xian - RealFire 001:<br/>Display：水快烧开了，当前温度：96度。<br/>// 省略 ...<br/>源码下载：<a href="http://www.tracefact.net/SourceCode/Delegates-and-Events-in-CSharp.rar" target="_blank" rel="external">http://www.tracefact.net/SourceCode/Delegates-and-Events-in-CSharp.rar</a><br/>转 <a href="http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html" target="_blank" rel="external">http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/126.htm</link>
			<title><![CDATA[小菜编程成长记系列 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Sat,05 Dec 2009 10:18:35 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=126</guid>
		<description><![CDATA[<a href="http://kb.cnblogs.com/page/42063/" target="_blank" rel="external">http://kb.cnblogs.com/page/42063/</a>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/124.htm</link>
			<title><![CDATA[关于递归的一点点笔记 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Thu,03 Dec 2009 14:58:34 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=124</guid>
		<description><![CDATA[class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main() <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Program pr = new Program();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pr.Count(3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Count(int intval)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (intval == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Count(intval - 1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(&#34;{0}&#34;, intval);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/> }<br/><br/>我一看这不简单，肯定是3，2，1。可是答案却是1，2，3<br/><br/>我觉得不对头，于是写了个断点调试了一下，运行到return之后，Count(intval - 1)开始不断地重复，把原来的值都恢复了过来。<br/><br/>实在不明白递归为什么会是先进后出？找了点资料。<br/><br/>总结递归的用法,可以用一句话来形容，“层层递进，原路返回”，正如上边的程序所示。每次调用Count方法时，只要intval的值！=0就会继续调用count方法，这叫做层层递进。但Count函数是要返回值的，如果没有得到返回值，函数就会被挂在那里，等待着返回值，有了函数才能算执行完毕，程序才能往下继续执行。在层层递进地过程中，当intval=0的时候，这时就到了”原路返回”的时候了.由于刚才挂起的函数都在等返回值。所以一旦有了返回值函数要一个一个的退出，本着先进后出的原则一个一个的给它的上级函数一个返回值最后当退到intval为3时 就出现了我们所要的结果。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/117.htm</link>
			<title><![CDATA[让你吃惊的60个绝对得看的常识，欢迎补充！ ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Fri,20 Nov 2009 10:59:54 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=117</guid>
		<description><![CDATA[1.吃了辣的东西，感觉就要被辣死了，就往嘴里放上少许盐，含一下，吐掉，漱下口，就不辣了； <br/>2.牙齿黄，可以把花生嚼碎后含在嘴里，并刷牙三分钟，很有效； <br/>3.若有小面积皮肤损伤或者烧伤、烫伤，抹上少许牙膏，可立即止血止痛； <br/>4.经常装茶的杯子里面留下难看的茶渍，用牙膏洗之，非常干净； <br/>5.仰头点眼药水时微微张嘴，这样眼睛就不会乱眨了； <br/>6.嘴里有溃疡，就用维生素C贴在溃疡处，等它溶化后溃疡基本就好了； <br/>7.眼睛进了小灰尘，闭上眼睛用力咳嗽几下，灰尘就会自己出来； <br/>8.洗完脸后，用手指沾些细盐在鼻头两侧轻轻按摩，然后再用清水冲洗，黑头和粉刺就会清除干净，毛细孔也会变小； <br/>9.刚刚被蚊子咬完时，涂上肥皂就不会痒了；<br/>10.如果嗓子、牙龈发炎了，在晚上把西瓜切成小块，沾着盐吃，记得一定要是晚上，当时症状就会减轻，第二天就好了； <br/>11.吹风机对着标签吹，等吹到商标的胶热了，就可以很容易的把标签撕下来； <br/>12.旅行带衣服时如果怕压起褶皱，可以把每件衣服都卷成卷； <br/>13.打打嗝时就喝点醋，立杆见影；<br/>14.吃了有异味的东西，如大蒜、臭豆腐，吃几颗花生米就好了；<br/>15.治疗咳嗽，特别是干咳，晚上睡觉前，用纯芝麻香油煎鸡蛋，油放稍多些，什么调味料都不要放，趁热吃过就去睡觉，连吃几天效果很明显；<br/>16.手腕长粗的MM想带较细的手镯，就不能硬带，应把手上套上一个塑料袋再带上手镯，非常好带，也不会把手弄疼，取下也是同样的方法； <br/>17.栗子皮难剥，先把外壳剥掉，再把它放进微波炉转一下，拿出后趁热一搓，皮就掉了； <br/>18.插花时，在水里滴上一滴洗洁精，可以维持好几天；<br/>19.把核桃放进锅里蒸十分钟，取出放在凉水里再砸开，就能取出完整的桃核仁了； <br/>20.把虾仁放进碗里，加一点精盐、食用碱粉，用手抓搓一会儿后用清水浸泡，然后再用清水冲洗，即能使炒出的虾仁透明如水晶，爽嫩可口；<br/>21.炒肉时，先把肉用小苏打水浸泡十几分钟，倒掉水，再入味，炒出来会很嫩滑； <br/>22.将残茶叶浸入水中数天后，浇在植物根部，可促进植物生长； <br/>23.把残茶叶晒干，放到厕所或者沟渠里燃熏，可消除恶臭，具有驱除蚊子苍蝇的功能； <br/>24.夹生饭重煮法：可用筷子在饭内扎些直通锅底的孔，洒入少许黄酒重焖，<br/>25.若只表面夹生，只要将表层翻到中间再焖即可；<br/>26.巧除纱窗油腻：将洗衣服、吸烟剩下的烟头一起放在水里，待溶解后，拿来擦玻璃窗、纱窗，效果真不错； <br/>27.只要在珠宝盒中放上一节小小的粉笔，即可让首饰常保光泽； <br/>28.桌子、瓶子表面的不干胶痕迹用风油精可以擦拭； <br/>29.出门时随时在包里带一节小的干电池，若裙子带静电，就把电池的正极在裙子上面擦几下即可去掉静电； <br/>30.不管是鞋子的哪个地方磨到了你的脚，你就在鞋子磨脚的地方涂一点点白酒，保证就不磨脚了； <br/>31.亨调蔬菜时，如果必须要焯，焯好菜的水最好尽量利用。如做水饺的菜，焯好的水可适量放在肉馅里，这样既保证营养，又使水饺馅味美有汤； <br/>32.夏天足部容易出汗，每天用淡盐水泡脚可有效应对汗脚； <br/>33.夏天游泳后晒晒太阳，可防肌肤劳损等疾病发生； <br/>34.夏天枕头易受潮滋生霉菌，时常曝晒枕芯有利健康； <br/>35.多吃薏米小豆粥等潮湿健脾，可防暑湿； <br/>36.防失眠：睡前少讲太多话，忌饮浓茶，睡前勿大用脑，可用热水加醋洗脚； <br/>37.金银花有疏散风湿功效，金银花水煎取汁凉后与蜂蜜冲调可解暑； <br/>38.吃过于肥腻的食物后喝茶，能刺激自律神经，促进脂肪代谢； <br/>39.睡眠不足会变笨，一天需要睡眠八小时，有午睡习惯可延缓衰老； <br/>40.双手易变得干燥粗糙，用醋泡手十分钟可护肤； <br/>41.夏天擦拭凉席，用滴加了花露水的清水擦拭凉席，可使凉席保持清爽洁净。当然，擦拭时最好沿着凉席纹路进行，以便花露水渗透到凉席的纹路缝隙，这样清凉舒适的感觉会更持久； <br/>42.早餐多食西红柿、柠檬酸等酸性蔬菜和水果，有益于养肝； <br/>43.爽身止痒洗头或洗澡时，在水中加五六滴花露水，能起到很好的清凉除菌、祛痱止痒作用； <br/>44.葡萄含有睡眠辅助激素，常食有助睡眠； <br/>45.夏天多喝番茄汤既可获得养料，又能补充水分，番茄汤应烧好并冷却后再喝，所含番茄红素有一定的抗前列腺癌和保护心肌的功效，最适合于男子；吃酸性物质马上刷牙会损害牙齿健康； <br/>46.因外伤碰破皮肉时，在伤处涂上牙膏进行消炎、止血，再包扎，作为临时急救药，以药物牙膏效果最为显著； <br/>47.将白醋喷洒在菜板上，放上半小时后再洗，不但能杀菌，还能除味； <br/>48.喝酸奶能解酒后烦躁，酸奶能保护胃黏膜、延缓酒精吸收，并且含钙丰富，对缓解酒后烦躁尤其有效； <br/>49.皮鞋包皮放久了发霉时，可用软布蘸酒精加水（1：1）溶液擦拭即可； <br/>50.发生头痛、头晕时，可在太阳穴涂上牙膏，因为牙膏含有薄荷脑、丁香油可镇痛； <br/>51.蜡烛冷冻二十四小时后，再插到生日蛋糕上，点燃时不会流下烛油； <br/>52.白色衣裤洗后易泛黄，可取一盆清水，滴上二三滴蓝墨水，将洗过的衣裤在浸泡一刻钟，不必拧干，就放在太阳下晒，即可洁白干净； <br/>53.过多食用生葱蒜会刺激口腔肠胃， 不利健康，最好加一点醋再食用； <br/>54.及时补充水分但应少喝果汁、可乐、雪碧、汽水等饮料，含有较多的糖精和电解质，喝多了会对肠胃产生不良刺激，影响消化和食欲。因此夏天应多喝白开水或淡盐（糖）水； <br/>55.每天早晨用豆腐摩擦面部几分钟，坚持一个月，面部会变得很滋润； <br/>56.空调室内温差不宜超过五度，即使天气再热，空调室内温度也不宜到24度以下； <br/>57.加酶洗衣粉剂放在温水中需要较长的分解时间才能使洗衣效果更佳； <br/>58.夏天，人的活动时间变长，出汗多，耗能过大，应适当多吃鸡、鸭、瘦肉、鱼类、蛋类等营养食品，以满足人体的代谢需要； <br/>59.头痛时把苹果磨成泥状涂在纱布上，贴在头痛处，症状可减轻； <br/>60.皮包上有污渍，可以用棉花蘸风油精擦拭。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/116.htm</link>
			<title><![CDATA[<<蜗居>>经典台词]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Fri,20 Nov 2009 10:06:27 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=116</guid>
		<description><![CDATA[早上上班就在博客园逛了一上..刚好看到。发现不错。就留下来了<br/><br/>因为人这一生，你可以背金钱的债，却不能背感情的债。背金钱的债你有还清的希望，而背了感情的债也许到死都会愧疚。<br/><br/>酒足饭饱思淫欲，你还吃着面呢，就想那事……<br/><br/>为什么我们的人生和梦想都要拴在一个房子上呢!我们所有的努力,所有的期盼都仅仅是一处房子,这样的人生是不是太悲哀了!&nbsp;&nbsp;<br/><br/>你是我丈夫，我要的，不是你多么风光显要，多么飞黄腾达。那都是给外面人看的。我要的，就是到老有个伴，孩子有个爸爸。不过，现在我知道了，我这十几年的付出，得到的不是自己老了以后有个相互扶持着走向墓地的人，却是在为别人做嫁衣裳。我度过了苦尽，把甘来留给后人。宋思明，你说你一回来，我就给你张臭脸看。是的。的确如此，因为，我没办法笑出来。我每天早上醒来，枕头都是湿的，心里都是凉的，屋里都是空的，然后你要我在你回来的时候卑躬屈膝请求你，讨好你，承欢你？我做不到。我们两个，好聚好散。我不去指责你有多么的无情，多么的忘恩负义，多么的朝三暮四，因为到我这个年纪的女人，早就该明白，男人都是一样，年轻的时候需要垫脚石，中年的时候需要强心针，晚年的时候需要根拐棍。我活该自己做了垫脚石。没什么可抱怨的。但是，请你不要在无情上再加卑鄙，把分裂家庭的责任还推卸到我的头上。不爱了就是不爱了，不谈对错，不谈谁负了谁。但不要给自己贴上道德的标签。 <br/><br/>宋太太：这笔钱呢，是我给他的。女人嘛，不要太不善良。你既然跟了他，好歹也算我们家家谱里不入名但却担个分的，叫什么呢？侍妾？随伴？妾都算不上。妾好歹还要过个门儿呢!就算陪睡吧!比外头招个妓女总强点儿，至少不带病。我跟他说，既然陪睡一场，钱总要丢两个的。哪怕就是嫖，那也不能白嫖啊!嫖也要有嫖品，就好像赌博一样。而且出手大方点儿，方显自己身价。这钱，我出得起。&#34;宋太顺手在红木桌子上敲了敲。又在旁边的椅子上摸了一把。&#34;不过呢，今天早上，他改主意了。他让我过来，把这笔钱拿走。算来算去，你实在不值这点钞票。&#34; <br/><br/><br/>如果时光可以倒流，我会带着你们过另一种生活，不要太多的钱，每天去菜场斤斤计较，为发论文、评职称而与人争得面红耳赤，也为女儿考不上好学校而心焦。也许，这样，才是一种幸福的生活，而我以前并没有意识到。<br/><br/>海藻：人情债，我肉偿了……<br/><br/>宋太太：“在他犯了所有男人都故意犯的错之后，我走了所有女人都走的一条路。” <br/>宋太太密友：“这个世道真是tmd不公平，男人做事漂亮不漂亮是一回事，说话一定是漂亮；女人做事龌龊不龌龊是一回事，举止是一定要文雅的。这就是生存法则……” <br/>宋太太：“我把他收拾体面了，出去风光。别的女人看见了，又有风度，又有温度，马上就有热度，想不到背后还有个女人操劳过度。” <br/>宋太太密友：“你感情的创伤，多少物质都是弥补不了的。”宋太太：“弥补不了，可好歹在我在弥补。我要是什么都不做，只会更伤。” <br/>还有她和宋闹离婚的时候说：“女人活到我这个岁数，早该明白了男人都是一个样。年轻时候需要垫脚石，中年时就需要强心针，到老了就要扶着拐棍。我活该自己做了垫脚石……” <br/><br/>宋思明：“关系这个东西啊，你就得常动。越动呢就越牵扯不清，越牵扯不清你就烂在锅里。要总是能分得清你我他，生分了。每一次，你都得花时间去摆平，要的就是经常欠。欠多了也就不愁了，他替你办一件是办，办十件还是办啊。等办到最后，他一见到你头就疼，那你就赢了，要风得风，要雨得雨。” <br/><br/>苏淳： 有钱能使鬼推磨 这话一点不假，4万还是“我妈”，6万就成了“咱妈”了！幸好这钱拿回来了，否则估计你嘴里就是他妈了！ <br/><br/>那个花季的姑娘，一路跟自己走来，从鲜花盛开到现在的憔悴。她虽然脾气暴躁，但那不是她的错，是生活所迫。一个女人，如果出门有车，入门有仆，是很难保持恶劣脸孔的。在这样的一个浮光媚影的城市，有一个女人肯这样跟着一无所有的自己，应该感激她，包容她，爱她。让她快乐。 <br/><br/>小贝：什么是幸福？幸福就是筷头上的肉丝~ <br/><br/>苏淳 :在这个世界上，到处都是地雷，一不小心就会踩道，和平年代更是如此。<br/><br/>你是我的脚踝……<br/><br/>宋对海藻：“人之所以慷慨，是因为拥有的比付出的多。” <br/>宋对陈寺福：“人的贪念就在于得到的太容易。”<br/><br/>爱上一个人是一秒钟的事，爱却是一辈子的事。<br/><br/>别闹了，睡吧。<br/><br/>凡是钱能解决的问题，就不是大问题。人这一辈子，有许多困扰是无法解决的，比方说生老病死，比方说众叛亲离，比方说勾心斗角，比方说不再相爱。所有的这一切，都比房子啊，钞票啊要严重得多。一个人可以背金钱的债，却不能背感情的债。背金钱的债你有还清的希望，而背了感情的债也许到死都会愧疚。<br/><br/>每天晚上，我坐在窗前，看着窗外的灯光我就会在想，这城市多奇妙。有多少人，就有多少种生活，别人的生活我不知道，而我呢，每天一睁开眼，就有一连串数字蹦出脑海：房贷六千，吃穿用度二千五，冉冉上幼儿园一千五，人情往来六百，交通费五百八，物业管理费三百四，手机电话费二百五，还有煤气水电费二百……也就是说，从我苏醒的第一个呼吸起，我每天要至少进账四百，至少；这就是我活在这个城市的成本，这些数字逼得我一天都不敢懈怠，根本来不及细想未来十年；我哪有什么未来，我的未来就在当下，在眼前。 <br/><br/>那天，陪妈妈去逛街，其实我们都不用走，那个人流就推着我们向前走。我想不走都不行，想停下都不行，我当时就笑了，我说这就是我们的生活，来不及细想，没有决断，就这样懵懵懂懂的被人推着往前走，而我青春年少时候的理想上哪去了？我的理想就被这匆匆的人流推得无影无踪。是啊，我曾经的坚持，内心的原则，和我少年的立志，就被这孩子被家庭被工作被房子被现实生活磨砺得不胜些许。其实很多时候我是有原则的，我不想抄近道，我更不想投机取巧，但是每当我看到那些不如我的人，因为插队比我先拿到票；那些不如我的人，因为放弃了原则，而省了十几年的奋斗，我真的不服气，有的时候我都在怀疑，我这份坚持到底是对还是不对；我甚至在责怪这个社会，为什么这么不公平，为什么大家有规不尊，有矩不守，而让我们这些辛辛苦苦勤勤恳恳的蜗牛受罪呢？ <br/><br/>这两天，我在看一些投资方面的书。其实我也没有多少钱投资了，我就是想如何让我手头这点东西不贬值，我觉得这大概是这个城里所有人的恐慌，大家都忧心忡忡的，得到的怕失去，没得到的又想拥有。后来我在一本书里找到巴菲特的一句话叫：永远坚持价值投资的理念。他说不管在任何年代，任何社会，任何经济环境下，投机的风险要永远大于投资。他说也许，从短期来看，一次投机也许会让你获利很多；但是从长远来看，任何一次投机就会造成全盘皆输；但投资不一样。投资是只要你坚持物有所值，最终他会增值并硕果累累的。我觉得他这话挺有道理的。我的理解是只要你有信念有追求，只要你坚持，那你一定会比随波逐流要行的远，行的正。就想宋思明，他很聪明，他是非常聪明，也很有才华，但如果他能选择一条正确的路，选择正确的价值观，我相信他的前途会无量的，但他恰恰没有这么做，他恰恰凭着自己的一时聪明，选择了一条投机之路，最终还是随波逐流了。 <br/><br/>海藻，我在这个城市，算是扎根下来了。我相信，凭我的坚持，凭我的努力，最终我一定会过上我想要的日子，而你呢？你还这么年轻，这么有朝气，虽然你犯过错，虽然你曾经失败过，但是没关系，正因为你年轻你知道吗？因为你年轻，所以你有大把的时间纠正错误重新再来，我希望你勇敢。勇敢一下好吗？相信自己，明天一定会好的，会好的。<br/><br/>海萍对刚出生不久的冉冉：“奶粉要进口的，尿布要名牌的。进出都要钱，你整个儿一双向收费，比中国移动还狠啊！” <br/><br/>其实买房子和娶老婆是一样的，睁只眼闭着眼，一辈子就过去了。&nbsp;&nbsp; <br/><br/>也许从短期来看，一次投机也许会让你获利很多。但是从长远来看，任何一次投机就会造成全盘皆输，但投资不一样。投资时只有你坚持，物有所值，最终它会增值，并硕果累累。 <br/><br/>该得到的我都得到了。爱我的丈夫，可人的女儿，应有的社会地位和尊重。女人到我这个年纪，活得这么舒畅的，不多。我没任何怒气，我倒是很同情你，希望你能在我这年纪上，也能拥有与我一样多的东西，而不是像过街老鼠一样出门小心翼翼。希望你以后的丈夫在知道你这段不堪的历史之后，依旧把你当成宝贝。 <br/><br/>宋太太打击郭海藻:当你的丈夫知道你那些不堪的历史时,还会在把你当成宝贝吗?当你到了我那个年龄什么都不是,你挥霍了青春.最后换的只是对自己最深的伤害. <br/><br/>宋说：男人这一辈子要拥有一辆好车，若干知己和一个…… <br/>说完看着海藻笑 <br/>海藻：和一个什么？那您都拥有了吗？ <br/>宋说：如果我想的话。<br/><br/>“男人一旦有了选择有了条件，一定会疯狂反扑，弥补他们缺失的那段。你想啊人家最青涩，最萧条的时光正是荷尔蒙最强的时候，什么都想要，什么都没有，要钱没钱，要地位没地位，要权没权，能守住一个就不错了。可现在就像撒了欢的小狗，关了半辈子的猛兽，一旦有了选择有了条件，干嘛不成就青春时候的梦想呢。”<br/><br/>“他为什么喜欢海藻，他是真心喜欢海藻吗？我看，他是在享受手里的权利带给他的那份荣耀，想他这种人荣耀压抑久了，不释放就会得病。。。海藻不过是他借以炫耀他成功的首段而已……海藻还口口声声的说爱他，这是真的爱吗？我看他爱的不是宋本人，是宋光环照耀下，对她所求所欲无不点头的一种畅快。<br/>”<br/>苏淳：此处不留奶，自有留奶处！ <br/><br/>一个人的能力不是他能做什么，而是在诱惑面前他又多大的抵抗力。<br/><br/>50块的内衣和500块内衣的区别,就是女人和女色的区别。<br/><br/>攒钱的速度永远赶不上涨价的速度。&nbsp;&nbsp;<br/><br/>老婆就是那个在你耳朵边叨叨一辈子的人。<br/><br/>只管脱裤子，不管收种的。男人靠的住，母猪都上树。 <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/112.htm</link>
			<title><![CDATA[网页如何有效调用exe]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Sat,10 Oct 2009 22:22:17 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=112</guid>
		<description><![CDATA[基于浏览器的应用，表现力始终不够丰富，我们常常会想，在一个网页中，点一下某个链接，能够直接调用安装好的可执行程序有多好啊。按照微软的推荐，应该是通过ActiveX，把可执行程序嵌入到网页中，例如flash的ActiveX。这样，我们就要购买ActiveX的签名，不通过签名的东西，在IE6中是无法加载的，为一个小项目购买ActiveX的签名，代价太昂贵了。另外，很多时候还要考虑如果用户突然关闭了浏览器该怎么办。这对播放个flash、歌曲之类的没多大影响，但是很多时候，不能在关闭前清扫战场，带来的后果是灾难性的。通常，在企业应用中，我们总是通过IE直接调用exe。<br/>&nbsp;&nbsp;&nbsp;&nbsp;最早的时候，从网页调用一个EXE是很简单的事情，一段javascript就可以了。但是，自从IE6开始，微软就不再允许这种“极不安全的行为”。这也是有道理的。没事就给你来个“format d:/q”，即使不这么恶劣，动不动就给你弹几百个notebook，也确实够恐怖的。浏览器不应该与操作系统有太多不必要的关联。<br/>&nbsp;&nbsp;&nbsp;&nbsp;拿javascript在IE6测试之后，我几乎放弃了直接调用exe的想法，直到有一天，看到了腾讯的实现方法。<br/>&nbsp;&nbsp;&nbsp;&nbsp;腾讯有一个在网页上面显示QQ状态的东西，点一下就能弹出一个对话框跟该QQ用户聊天（就是我blog左上方的那个Q我的小图标），而不会有任何警告。好神奇啊。注册表里面研究了一天，终于明白了怎么回事。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;在windows中，注册表中包含各种协议（http，ftp，telnet等）的信息，包含了默认打开方式的参数。试一下，从IE的地址栏中输入telnet://www.163.com，出现什么了？弹出了一个命令行窗口，开始进行telnet操作。IE居然能完成这个，那么为什么就不能完成“telnet1://参数” 呢？<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Windows Registry Editor Version 5.00<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SIMS]<br/>@=&#34;SIMS&#34;<br/>&#34;URL Protocol&#34;=&#34;C:\\PROGRA~1\\SIMS\\trans.exe %l&#34;<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SIMS\DefaultIcon]<br/>@=&#34;%SystemRoot%\\system32\\url.dll,0&#34;<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SIMS\Shell]<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SIMS\Shell\open]<br/><br/>[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SIMS\Shell\open\command]<br/>@=&#34;C:\\PROGRA~1\\SIMS\\trans.exe %l&#34;<br/><br/>&nbsp;&nbsp; 把这个东西导入注册表，那么我们在浏览器中输入sims://1022,那么就会自动调用c:\program files\sims\trans.exe（当然了，你得确实有这个文件），并把1022这个参数传给该exe。这个操作被认为是安全的，不会有任何的限制。<br/>&nbsp;&nbsp;&nbsp;&nbsp;到这里，思路就清晰了，我们的安装程序中，在注册表中建个协议，例如上面的SIMS，再把要执行的exe的路径信息写入，在网页直接一个超链接，协议://参数就可以了。exe文件接受这个参数，进行相应的处理。搞定。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;记住，协议://后面的所有字符串被看做是一个参数。那么，exe文件永远只有两个参数，参数0是它的完整执行路径，参数1就是网页传过来的字符串。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/mydocuments/111.htm</link>
			<title><![CDATA[HTML Iframe dom动态生成且隐藏边框]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[My Documents]]></category>
			<pubDate>Wed,01 Jul 2009 13:54:37 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=111</guid>
		<description><![CDATA[<p>The IFrame object represents an HTML inline frame. For each instance of an HTML &lt;iframe&gt; tag in a document, an IFrame object is created.<br />
IFrame 对象代表HTML 轴向(内)框架。当HTML中&lt;iframe&gt;标签，Iframe对象就建立了</p>
<p><strong>IE:</strong> Internet Explorer, <strong>F:</strong> Firefox, <strong>N:</strong> Netscape, <strong>W3C:</strong> World Wide Web Consortium (Internet Standard).</p>
<h3>Properties属性</h3>
<p>
<table class="ex" cellspacing="0" width="100%" border="1">
    <tbody>
        <tr>
            <th align="left" width="25%">Property<br />
            属性</th>
            <th align="left" width="55%">Description<br />
            描述</th>
            <th align="left" width="5%">IE</th>
            <th align="left" width="4%">F</th>
            <th align="left" width="4%">N</th>
            <th align="left" width="7%">W3C</th>
        </tr>
        <tr>
            <td valign="top">align</td>
            <td valign="top">Sets or returns how to align the iframe according to the surrounding text<br />
            设置或获取排列。</td>
            <td valign="top">5</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">contentDocument</td>
            <td valign="top">Returns the document the iframe contains<br />
            文档框架的内容</td>
            <td valign="top">-</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">frameBorder</td>
            <td valign="top">Sets or returns whether to display a border for the iframe<br />
            设置或获取框架间的空间，包括 3D 边框。</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">height</td>
            <td valign="top">Sets or returns the height of the iframe<br />
            设置或获取<span twffan="done" replace="1">对象</span>的高度。</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">id</td>
            <td valign="top">Sets or returns the id of the iframe (In IE 4 this property is read-only)<br />
            获取标识<span twffan="done" replace="1">对象</span>的字符串。</td>
            <td valign="top">4</td>
            <td valign="top">1</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
        <tr>
            <td valign="top">longDesc</td>
            <td valign="top">Sets or returns a URL to a long description of the iframe<br />
            设置或获取<span twffan="done" replace="1">对象</span>长描述的统一资源标识符(URI)。</td>
            <td valign="top">6</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">marginHeight</td>
            <td valign="top">Sets or returns the top and bottom margins of the iframe<br />
            设置或获取显示框架中文本之前的上下边距高度。</td>
            <td valign="top">5</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">marginWidth</td>
            <td valign="top">Sets or returns the left and right margins of the frame<br />
            设置或获取显示框架中文本之前的左右边距宽度。</td>
            <td valign="top">5</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">name</td>
            <td valign="top">Sets or returns the name of the iframe<br />
            设置或获取框架的名称。</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">scrolling</td>
            <td valign="top">Sets or returns whether the iframe can be scrolled<br />
            设置或获取框架是否可被滚动。</td>
            <td valign="top">5</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top"><a href="http://61.139.52.111:8090/kj/Manfeel/w3pop/prop_iframe_src.asp.htm" tppabs="http://www.w3pop.com/tech/school/htmldom/prop_iframe_src.asp">src</a></td>
            <td valign="top">Sets or returns the URL to be loaded by the iframe<br />
            设置或获取要由<span twffan="done" replace="1">对象</span>装入的 URL。</td>
            <td valign="top">5</td>
            <td valign="top">1</td>
            <td valign="top">6</td>
            <td valign="top">Yes</td>
        </tr>
        <tr>
            <td valign="top">tabIndex</td>
            <td valign="top">Sets or returns the index that defines the tab order for the iframe<br />
            设置或获取定义<span twffan="done" replace="1">对象</span>的 Tab 顺序的索引。</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
        <tr>
            <td valign="top">width</td>
            <td valign="top">Sets or returns the width of the iframe<br />
            设置或获取<span twffan="done" replace="1">对象</span>的宽度。</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">Yes</td>
        </tr>
    </tbody>
</table>
</p>
<h3>Methods方法</h3>
<p>
<table class="ex" cellspacing="0" width="100%" border="1">
    <tbody>
        <tr>
            <th align="left" width="25%">Method<br />
            方法</th>
            <th align="left" width="55%">Description<br />
            描述</th>
            <th align="left" width="5%">IE</th>
            <th align="left" width="4%">F</th>
            <th align="left" width="4%">N</th>
            <th align="left" width="7%">W3C</th>
        </tr>
        <tr>
            <td valign="top">blur()</td>
            <td valign="top">Removes focus from the iframe<br />
            取消对iframe的聚焦</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
        <tr>
            <td valign="top">focus()</td>
            <td valign="top">Gives focus to the iframe<br />
            让iframe得到聚焦</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
    </tbody>
</table>
</p>
<h3>Events事件</h3>
<p>语法: object.event_name=&quot;someJavaScriptCode&quot;</p>
<p>
<table class="ex" cellspacing="0" width="100%" border="1">
    <tbody>
        <tr>
            <th align="left" width="25%">Event<br />
            事件</th>
            <th align="left" width="55%">Description<br />
            描述</th>
            <th align="left" width="5%">IE</th>
            <th align="left" width="4%">F</th>
            <th align="left" width="4%">N</th>
            <th align="left" width="7%">W3C</th>
        </tr>
        <tr>
            <td valign="top">onBlur</td>
            <td valign="top">Executes some code when the iframe loses focus<br />
            当iframe失去焦点的时候执行代码</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
        <tr>
            <td valign="top">onFocus</td>
            <td valign="top">Executes some code when the iframe gets focus<br />
            当iframe得到焦点的时候执行代码</td>
            <td valign="top">5</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">No</td>
        </tr>
    </tbody>
</table>
</p>
<div class="doctt" twffan="done">
<h1>&nbsp;</h1>
<p>通常要隐藏iframe的边框时需要用到frameborder属性，例如使用Dreamweaver可以生成如下代码：<br />
&lt;iframe frameborder=0 src='xxxx' width='xxx' height='xxx'&gt;&lt;/iframe&gt;<br />
<br />
但是如果使用DOM方式来生成一个iframe时<strong>IE</strong>却始终隐藏不了边框，例如：<br />
<br />
var iframeCell = document.createElement('iframe');<br />
iframeCell.setAttribute('frameborder',0);&nbsp;&nbsp;&nbsp; // <strong>Firefox下有效，IE下无效</strong><br />
<br />
经过高人指点，发现是大小写的原因，改为：<br />
iframeCell.setAttribute('frame<font color="#ff0000" size="3"><strong>B</strong></font>order',0);&nbsp;&nbsp;&nbsp; // <strong>Firefox和IE均有效</strong><br />
<br />
汗！frameBorder居然在CSS手册中查不到，故立刻记录下来，以备不时之需。<br />
<br />
附：目前已知的DOM和HTML拼写有区别的属性（不断添加&hellip;&hellip;）<br />
<br />
HTML / DREAMWEAVER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOM<br />
--------------------------------------------------------------------------------<br />
frameborder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame<font color="#ff0000" size="3"><strong>B</strong></font>order<br />
cellspacing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell<font color="#ff0000"><strong><font size="3">S</font></strong></font>pacing<br />
cellpadding&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell<font color="#ff0000" size="3"><strong>P</strong></font>adding<br />
bgcolor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bg<font color="#ff0000" size="3"><strong>C</strong></font>olor<br />
colspan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; col<font color="#ff0000" size="3"><strong>S</strong></font>pan<br />
rowspan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row<font color="#ff0000" size="3"><strong>S</strong></font>pan</p>
</div>]]></description>
		</item>
		
</channel>
</rss>
