ROBERT HESS:我猜您本来也应当在那里放置一个计数器,不过这会完全使foreach不起作用。
JEFFREY RICHTER: 是的,很正确。
ROBERT HESS:那么,您认为C#还另外具有什么样很酷特性,以让观众说,好,这就是我要选的语言?
JEFFREY RICHTER:嗯,正如Anders在前面指出,C#是完全基于组件的,在那里具有事件,具有接口,具有属性,它们都是一等公民,所以没有下滑杠,没有下滑杠属性等任何类似的东西。出身于C#的人应当熟悉异常处理,因为遇到错误时,就调用在基类库中的framework里的错误处理程序。因此我在屏幕上写了一小块代码,以示范如何进行适当的错误处理。我具有一个try语块,再强调一下,您应注意在try这个单词的前面没有下滑杠,因为在C#语言中它位于第一阶层。我new一个文件流对象,这是打开磁盘里的文件的一种方式。而在双引号里,我给出了我们希望打开的文件的路径名。 using System; using System.IO;
public class App { public static void Main() { FileStream fs = null; try { fs = new FileStream(@"C:\NotThere.txt", FileMode.Open); } catch (Exception e) { Console.WriteLine(e.Message); } finally { if (fs != null) fs.Close(); } } }
ROBERT HESS:我认为当应用程序变得越来越复杂时,人们在其中进行错误处理是相当重要的,当企图创建文件或进行类似的操作时,出错的机会可能会很多。尤其是使用其他人的对象和类似的东西时。 那么,这是不是意味着在编写C#的应用程序时,您必须保证函数和方法都能正确地设置异常并抛出一个异常,以便人们可以捕获它?
ROBERT HESS:我想这带来了有利的选择。迄今为止,我们一直在谈论用C#和.NET framework等进行应用程序的开发,并且我了解到您原来就是一个货真价实的应用程序设计师,编写Windows应用程序和标准的GUI程序。令人意外的是web出现了,因此每个人都想到编写web应用程序,或编写运行在浏览器内部基于HTML的应用程序。但现在以一句话对您的产品进行概括,您正在谈到具有这种alpha合成标准的Windows图形应用程序,也谈到了访问web并以相应的格式返回给其它系统。那么象您我这样的Win32应用程序开发者,对传统的应用程序开发环境以及新的web应用程序与.NET的混合有什么看法?
JEFFREY RICHTER:嗯,我实际上在做的就是这种特别的事情,它不是Win32图形应用程序,而是一个web窗体(form),随意一个web窗体。 ROBERT HESS:那么它甚至也不是一个传统的Windows应用程序吗?它听起来很象啊。 JEFFREY RICHTER:嗯,它真正是什么?实际上它比传统的Win32程序具有更复杂的体系。它实际是一个web服务,并且我认为它是第一批公用微软web服务(public Microsoft web services)之一,是免费的,所以我会给出URL地址。因此谁都可到那里去摆弄摆弄,这个地址是teraserver.Microsoft.net。 ROBERT HESS:噢,我会把这个地址放在本记录稿的后面,以便大家点击访问。 JEFFREY RICHTER:那里有许多微软技术的广告宣传,其中包括Windows 2000 Datacenter、SQL 2000、IIS、ASP.net、.NET frameworks、web services和web forms。所在的资料都在那个网站上。有一个具有图像信息的teraserver web服务,它显示立体地形图和常规像片里的图像和标题。而且我们也有一个人口普查(census)服务,所以可以到那里输入纬度、经度等,便得到相应的城市名以及生活在该地区的人口。我们还有地标(landmark)服务,给出一个以经纬度标定的矩形区,就可以找到该地区范围内的医院和学校。因此,它们是三个单独的web 服务。它们本来可以由不同的公司实现,但实际上都是由我们实现的。接着我们编写了一个web窗体应用程序,它本来可以由任何公司编写,但这次又由我们编写,以便弄清概念,它向这三个不同的web服务发出信息,接着从teraserver获取标题信息,从landmark服务器获取地标信息,然后我们就能够把这些信息载入地图。
ROBERT HESS:那么,对于观众中跃跃欲试的开发人员,他们想要投身于C#,并要开始编写一些.NET应用程序,在他们跨出第一步之前,需要真正地了解什么?您认为最后还有什么要强调的? JEFFREY RICHTER:我认为,这些开发人员即将面临的一个最大问题就是,他们必须认识到是C#语言揭示了runtime和基类库中的性能,或许假以时日他们会从经验中学到。而许多人将会关注C#,也可能他们会试一试,或关注其它的.NET语言,也有可能会企图做一些不被这些语言所支持的事,接着当然认为这是不可能的。例如:在C#中,所有的数组默认都是基于0的,是以0索引(下标)开始的。但是公共语言运行库支持数组有任何的下边界和上边界。在基类库中构造了一个数组,它具有所设定的上下边界。但是C#自然不提供这些功能。因此,您必须去学习,随着时间的推移,就会了解它是什么,很多时候您或许可以使用其它语言,或者去访问语言的底层系统,语言是位于runtime顶端的,由于某些原因,设计者不让我们去访问底层系统。
ROBERT HESS:似乎就是这样,通过理解runtime底层的所有性能,然后您就可以把这些性能映射(map)给您目前正在使用的任何语言,以便了解它们是否提供给您所需要的功能。例如,我写网页时总是用纯粹的HTML编写,因为我知道它的具体功能是什么。但是假如我必须用FrontPage写,我知道FrontPage有它自己的格式(mindset),关系到网页的显示,并且我知道它能给我提供什么,不能提供什么。偶尔我也不得不转回纯粹的HTML并按这种方式增加某些东西或其它工具,这似乎是同样的事情。
ROBERT HESS:因此基本的思路听起来好象就是要去理解您正在使用的工具,以及它们在.NET framework底层的运行情况。好了,非常感谢Jeffery,又与您交谈我感到非常荣幸,以后我会找一个时间再次邀请您回来参加这个“show”节目的。
JEFFREY RICHTER:好,我很乐意,谢谢。
ROBERT HESS:这就是程序员Jeffery对C#和.NET framework的看法。他提供给你们一些好资料,以让你们了解更新的开发领域。他讲到了很多的URL地址和源代码例子以及类似的资料。我保证把它们放在本记录稿的后面,所以请继续观看其余的“show”节目,看看还有什么内容。 ……(略去与C#无关的谈话)
结束语
ROBERT HESS:谢谢您参加另一期的MSDN Show。这一次我们讨论了用C#编程的问题。 ERICA WIECHERS:在下一期的MSDN Show节目里,我们将谈论SOAP以及它是如何被整合到.NET编程体系的。 ROBERT HESS: 到那时,我们再在网上见面。
更多资料的链接
Microsoft C#资料: C#综述和介绍(Overview and Introduction to C#,http://msdn.microsoft.com/vstudio/nextgen/technology/csharpintro.asp)
C#语言规范(C# Language Specification,http://spectre/test/library/default.asp?URL=/library/dotnet/csspec/vclrfcsharpspec_Start.htm)
MSDN之声:深入C#专栏(MSDN Voices: Deep C# column,http://msdn.microsoft.com/voices/deepc.asp) 一个定期的专栏,在这里Bobby Schmidt分享他使用C#的观点和见识。
MSDN .NET开发者中心(MSDN Developer Center for .NET,http://msdn.microsoft.com/net/) 提供更多有关.NET技术的开发资料。
有关Jeffrey Richter谈话的资料: 代码范例(Sample Code:地址不详) 书: Windows Programming Applications for Microsoft Windows Programming Server-Side Applications for (和Jason Clark合写) Wintellect(http://www.wintellect.com/,) Jeffrey 的培训和咨询公司。 TerraServer.NET(http://terraserver.microsoft.net/) Jeffrey帮助编写的mapping服务。 Jeffrey Richter的主页(http://www.jeffreyrichter