代码改变世界

随笔分类 -  [01].NET技术

艾伟:手工打造运算符重载过程

2011-08-29 00:01 by 狼人:-), 129 阅读, 收藏,
摘要: 除了J#外,所有微软支持的.NET开发语言现在均支持运算符重载,因此纯粹为C#简化写法一样特性现已成为一种.NET开发中值得研究的一项重要语言特性。有人认为运算符重载其实就是简化写法,满足模拟基本类型操作的小功能,没有必要深究。但我觉得要多思考一层,为什么我们总希望模拟基本类型的操作?因为运算符重载能够将操作中缀化,能够自动推测静态过程的主体。 首先是操作中缀化。函数调用其实是一种前缀操作,函数(代表操作)总是在参数(代表操作数)之前写出。这样执行序列操作时运行的顺序其实和书写的顺序相反: H(x,y)G(H(x, y), z)F(G(H(x, y), z), w) 序列运行的顺序是H-> 阅读全文

艾伟:Ajax基石脚本异步并发调用参数传递

2011-08-29 00:01 by 狼人:-), 172 阅读, 收藏,
摘要: 在Ajax开发框架中,最基本的划分是服务器端和客户端。服务器端相对来说比较简单,只要是可以开发动态网页的语言都可以胜任;客户端浏览器就是JScript/JavaScript的天下了,好像没有看到有VBScript做的Ajax客户端库,就算它只支持IE。由于客户端依赖于脚本并运行在浏览器中,似乎比服务器端的可实现和可管理性还要差些。 这里我说一下Ajax中的A, Asynchronous调用的一些问题。如果我们在异步调用时不为方法传递任何的参数,那么这个问题也就简单甚至不存在了。但是事实上,我们开发一些稍微复杂些的功能时,对于"脚本异步并发调用参数传递"这个功能是很需要的。说 阅读全文

艾伟:在Mono平台开发前你应该知道

2011-08-29 00:01 by 狼人:-), 173 阅读, 收藏,
摘要: 在Mono平台开发前应该做的第一个事情就是,调整好心情,降低期望值: 对于Linux本地C程序员而言,由于习惯了疯狂和有魔力的本地C程序员开发,因此对于Mono提供的诸多限制可能不太满意。大体而言,Mono和.Net程序一样,属于框架开发的范畴,对于框架开发,最好在框架规定的范围内工作,否则会陷入孤立无缘的境地。Mono没有C开发那些唾手可得的工具,也不能对系统进行无限的挖掘,Mono关注的是应用软件开发,不是系统软件(Mono 可以支持本地服务开发)。Mono支持两重类型软件开发,以WEB为中心的软件和以本地为中心的开发。WEB包括常规以上的应用型网站开发,也包括基于服务的模型开发。... 阅读全文

艾伟:Private 访问控制符的准确意义

2011-08-29 00:01 by 狼人:-), 194 阅读, 收藏,
摘要: 假设我写了一个类,代码如下 namespaceXXXXXXX{publicclassA{privateintAdd(inta,intb){returna+b;}}} 如果要单元测试A的Add 方法的话, 由于Add 是private 的, 单元测试代码无法直接访问,这时候,我们可以利用反射来作. 微软很多的bug也多数通过反射,访问private 属性或者字段可以fixVS 2005 自动生成的单元测试代码 [DeploymentItem("XXXXXXX.exe")][TestMethod()]publicvoidAddTest(){Atarget=newA();Test 阅读全文

艾伟:.NET实现可交互的WINDOWS服务

2011-08-29 00:01 by 狼人:-), 208 阅读, 收藏,
摘要: 这几天想做个文件监控服务,看了一下网上的关于WINDOWS服务的文章,数量都不少,都只讲了如何做一个最基本的服务,却没有讲述如何与用户进行交互。查看了MSDN,看一下关于服务的描述: Windows 服务应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于 Windows 服务的区域不是交互区域,因此 Windows 服务应用程序中引发的对话框将是不可见的,并且可能导致程序停止响应。同样,错误信息应记录在 Windows 事件日志中,而不是在用户界面中引发。 .NET Framework 支持的 Windows... 阅读全文

艾伟:重提URL Rewrite(3):在URL Rewrite后保持PostBack地址

2011-08-29 00:01 by 狼人:-), 180 阅读, 收藏,
摘要: 在进行了URL Rewrite之后,经常会遇到的问题就是页面中PostBack的目标地址并非客户端请求的地址,而是URL Rewrite之后的地址。以上一篇文章中的重写为例: <rewriter> <rewrite url="^/User/(\d+)$" to="~/User.aspx?id=$1" processing="stop" /> <rewrite url="^/User/(\w+)$" to="~/User.aspx?name=$1" processin 阅读全文

艾伟:如何实现用返回值重载

2011-08-29 00:01 by 狼人:-), 184 阅读, 收藏,
摘要: 今天[ IceSharK - PP.Poet ]很清纯地提出了一个问题,如何能做到函数返回值重载?简单的说,就是如何实现 stringTest() {...} int Test() {...} 然后通过接受方的上下文自动选取重载: int i = Test(); string s = Test(); 当然VB或者C#都是不允许这样写的。不过IL并没有禁止这一写法,事实上在VB或C#中有一种语法结构允许按照返回值选取相应的重载,那就是隐式类型转换运算符(implicit operator或者Widening Operator CType)。通过辅助类的隐式类型转换运算符,我们可以实现上述要求的语 阅读全文

艾伟:重提URL Rewrite(2):使用已有组件进行URL Rewrite

2011-08-29 00:01 by 狼人:-), 146 阅读, 收藏,
摘要: 可能已经没有人会使用上一篇文章中的方法进行URL Rewrite了,因为提供URL Rewrite的组件早已铺天盖地了。 ASP.NET级别的URL Rewrite组件的原理很简单,其实只是监听BeginRequest事件,并且根据配置来决定目标URL。在我之前接触过的项目中,发现使用URLRewriter作为URL Rewrite组件的频率非常高,我想可能是因为那是微软提供的东西吧。 如果要使用URLRewriter,首先自然就是在web.config中配置一个HttpModule: <httpModules> <add name="ModuleRewriter& 阅读全文

艾伟:我说云计算

2011-08-29 00:01 by 狼人:-), 147 阅读, 收藏,
摘要: “云计算”这个词在今年颇为流行,以至于我终于不能再继续厚着脸皮当作没看到了。最初,我以为云计算就是一堆客户端计算机紧密的团结在一起,为一个共同的伟大的问题而献出自己的业余时间。后来某男告诉我,那叫网格计算,和云计算是两码事。他还给我演示了一下微软的Live Mesh。 Live Mesh总和“云计算”这个词一起出现,那么它究竟是干什么用的?就目前来看,Live Mesh只是用来在多个设备之间同步文件。这里的设备包括PC、Mac和手机,当然日后还可能支持更多的设备,比如XBOX和接入网络的电子相框等等。想象一下,你在远游时拍了一张照片,几秒钟后,这张照片就出现在远方母亲的床头相框中,这是多么神奇 阅读全文

艾伟:重提URL Rewrite(1):IIS与ASP.NET

2011-08-29 00:01 by 狼人:-), 149 阅读, 收藏,
摘要: 之前觉得这个话题已经被谈滥了。URL Rewrite早已经被广大开发人员所接受,网上关于URL Rewrite的组件和文章也层出不穷,但是总是让我感觉意犹未尽,于是最终还是忍不住提笔写了这系列文章。这些文章不会谈论URL Rewrite的价值与意义,而只会谈论纯技术的内容。文章中也不会有详尽地实现分析,而是结合了我的经验,从应用角度来讲解这个话题。您已经知道的,您还不知道的,别处已经讲过的,或者还没有讲过的,希望这系列文章的“旧事重提”不会让您觉得沉闷,并且能让您了解ASP.NET中URL Rewrite的方方面面。如果您以后再遇到URL Rewrite方面的问题是能够想到这几篇文章,估计.. 阅读全文

艾伟:聊一聊MONO的前前后后、里里外外

2011-08-29 00:01 by 狼人:-), 196 阅读, 收藏,
摘要: Mono 2.0 是一个里程碑版本,为Linux下.Net程序开发创造了基本框架。不考虑稳定性和可靠性,从功能上考虑,Mono 2.0的Microsoft 兼容的API有了大幅的改进,ADO.NET、ASP.NET和 Windows.Forms 三大应用API,使得为Linux平台迁移大量的网站、客户端程序和数据库应用程序成为可能。 作为开发平台,Mono平台的两大致命缺点是,缺乏有效数据库方案集成和开发工具集成。 缺乏集成数据库支持,是一个致命弱点。虽然灵活的中立API可以使得开发人员灵活的选择数据库,但是,作为平台提供商,要铭记一点,那就是,数据是软件的命脉,程序只是表达工具,一个开发平台 阅读全文

艾伟:推荐三个关于Azure的Session(pdc2008大会)

2011-08-29 00:01 by 狼人:-), 168 阅读, 收藏,
摘要: 到目前为止,介绍关于Azure平台的底层架构的文章一直都不多,可以说少的跟“国宝大熊猫”似的。所幸在PDC2008上有一些相关的信息(主要是一些SESSION和相关的PPTX)。今天就先整理一下,希望有哪位在微软从事相关工作的兄台出手(在不违反保密协议的前提下)将更多的信息发出来,让大家一起学习进步。 费话不多说了,开始今天的正文。 Session 1:Windows Azure: Architecting & Managing Cloud Services PPTX下载链接:http://mschnlnine.vo.llnwd.net/d1/pdc08/PPTX/ES02.pptx 阅读全文

艾伟:微软一家人---在云端运行的ServiceBus

2011-08-29 00:01 by 狼人:-), 201 阅读, 收藏,
摘要: TECHED2008大会已过去了快一个月了,在大会上所看到的关于 Azure的介绍至今还在头脑中不时出现。当然我本人不是什么云计算的狂热支持者,到如今我的观点也与蔡学镛先生的差不多,就是关注加观望(以免在云端一脚踏空摔下来)。另外就是我对云的兴趣目前也仅限在SDS和NetServiceBus这两方面。其中对服务总线一直感到很好奇,这一点在我之前的一篇文章中已做了一些说明。 今天的这篇文章主要是从流程上了解一下如何运行(或调试一个运行在云端ServiceBus中的service).通过它,可以对Azure的服务总线的工作原理有一个初步的认识(当然本人目前也在摸索阶段)。 本文中所用的DEMO其实 阅读全文

艾伟:这下没理由嫌Eval的性能差了吧?

2011-08-29 00:01 by 狼人:-), 191 阅读, 收藏,
摘要: 好吧,你偏要说Eval性能差 写ASP.NET中使用Eval是再常见不过的手段了,好像任何一本ASP.NET书里都会描述如何把一个DataTable绑定到一个控件里去,并且通过Eval来取值的用法。不过在目前的DDD(Domain Driven Design)时代,我们操作的所操作的经常是领域模型对象。我们可以把任何一个实现了IEnumerable的对象作为绑定控件的数据源,并且在绑定控件中通过Eval来获取字段的值。如下: protected void Page_Load(object sender, EventArgs e) { List<Comment> comments = 阅读全文

艾伟:[漫步云端,Azure Services Platform]第二回:第一个云Hello,Cloud!

2011-08-29 00:01 by 狼人:-), 128 阅读, 收藏,
摘要: 1 引言 在上篇《第一回:认识Azure Services Platform》一文中,我带着TechEd的兴奋之情将Azure Service做了一个概要性的介绍,因为没有申请到Invitation Token,所以只能掩饰饥渴的冲动,把完成第一个云端应用的重任留到了第二回。就是历史上所有讲述编程语言的著作以Hello,world开篇一样,本文也不例外的从Hello,Cloud!这一传统开始,实现一个运行在云端服务的Web应用。让我们品尝一下,漫步云端的快感吧:-) 2 必要的准备 实现一个简单的云端应用,如果没有数据库服务支持或者其他服务支持,我们仍然需要一些必要的准备,对于Azure应用而 阅读全文

艾伟:[漫步云端,Azure Services Platform]第一回:认识Azure Services Platform

2011-08-29 00:01 by 狼人:-), 204 阅读, 收藏,
摘要: 1 引言 今天是TechEd 2008北京站的第一天,作为技术盛会自然少不了很多抢眼的新技术面向广大的技术开发者。虚拟化、SQL Server、NUI、云计算,还有很多很多,每个人都充满了惊叹和期待,只有在那一刻,我们才感觉到技术带给世界的诸多魅力,也同时深味作为技术开发者的自豪。我们虽然常常抱怨于技术跟进的光速,需要不断的充实和创新,我们也同时幸福于技术进度的革命,让世界更多姿彩。 就在半年前,我和怪怪聊起了云计算这个在当时看来还算新鲜玩意的概念,而今天就已经第一时间在TechEd的发布会上感受到云技术的实现。这种神奇的速度,确实超出了我所有的想象,作为fans我不得不强迫自己马上试试写出自 阅读全文

艾伟:WinForm控件开发总结(六)-----控件属性类型转换器代码详解

2011-08-29 00:00 by 狼人:-), 228 阅读, 收藏,
摘要: 在上一篇文章,我为控件添加一个一个复杂属性,并且为这个属性的类型的编写了一个类型转换器,现在我们来看看这个类型转换器的代码,并解释一下这些代码的意义。 要实现一个类型转换器,我们必须要重写(override)四个方法: CanConvertFrom()――根据类型参数进行测试,判断是否能从这个类型转换成当前类型,在本例中我们只提供转换string和InstanceDescriptor类型的能力。 CanConvertTo()――根据类型参数进行测试,判断是否能从当前类型转换成指定的类型。 ConvertTo()――将参数value的值转换为指定的类型。 ConvertFrom()――串换参数v 阅读全文

艾伟:WinForm控件开发总结(三)------认识WinForm控件常用的Attribute

2011-08-29 00:00 by 狼人:-), 185 阅读, 收藏,
摘要: 在前面的文章里我们制作了一个非常简单的控件。现在我们回过头来看看这些代码透露出什么信息。 这个类是直接从Control类派生出来的,自定义控件都是直接从Control类派生出来的。这个类定义了一个属性TextAlignment,用来控制文本在控件中显示的位置: [Category("Alignment"),Description("Specifiesthealignmentoftext.")]publicContentAlignmentTextAlignment{get{returnalignmentValue;}set{alignmentValue=v 阅读全文

艾伟:WinForm控件开发总结(二)------使用和调试自定义控件

2011-08-29 00:00 by 狼人:-), 269 阅读, 收藏,
摘要: 在上一篇文章里我们创建了一个简单的控件FirstControl,现在我来介绍一下怎么使用和调试自己的控件。我希望将过程写的尽可能的详细,让想学习控件开发的朋友容易上手,高手们见谅。 在同一个solution里添加一个Windows Application工程(在Solution Explorer里右键点击CustomControlSample solution选择Add->New Project…),命名为TestControl。VS会为你自动生成一个Form,文件名为Form1.cs。在Solution Explorer里双击Form1.cs文件进入到Form设计界面。现在我们将Fir 阅读全文

艾伟:WinForm控件开发总结(一)------开篇

2011-08-29 00:00 by 狼人:-), 145 阅读, 收藏,
摘要: 我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获。现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮助。今天我来开个头。 其实开发WinForm控件并不是很复杂,.NET为我们提供了丰富的底层支持。如果你有MFC或者API图形界面的开发经验,那么学会WinForm控件可能只需要很短的时间就够了。 自己开发的WinForm控件通常有三种类型:复合控件(Composite Controls),扩展控件(Extended Controls),自定... 阅读全文