转贴:MSDN访谈录C#编程之四

编程

ROBERT HESS: 当作一个标准的For循环?

JEFFREY RICHTER:对,当作一个标准的For循环。因此有时到了最后,它所做工作比我当初想象的还要多。使用foreach是相当常见的,有了它实在是很爽。

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:等等,那是一个错误,是吗?

JEFFREY RICHTER:不,这正是我要指出的。因为C#有一个非常酷的特性,可以给字符串加上一个@符号的前缀,使我们转用原义字符串(verbatim  string,即真正的字符串,不加任何转义符),这里只允许使用单反斜杠“\”而不是双反斜杠“\\”。而长路径实在是一种十分常见的C++编程错误,人们以反斜杠代替双反斜杠,文件就不能正确地打开。在这种情况下应用加上"\n",意思是要换行。所以,这实在是一个巧妙的特性。不象一个file stream,因为人们熟悉Win32的CreateFile函数,当该函数无法打开一个文件时就会返回无效的句柄值,或返回-1意味着失败。在.NET framework中,当我企图打开一个不存在的文件时,就会引发一个异常,所以我在这里设置了一个catch语块,设法捕获到异常,这是一个非常简单的catch语块,只把信息输出屏幕,看看可能做了些什么,接着我又设置了一个finally语块,在这里的代码要确保能执行,因此假如我在try语块中有很多行真正涉及到文件操作的代码,在打开文件之后,finally语块就会执行并在最后明确地关闭文件。这实在是一种很巧妙的特性,Win32甚至是C++也不曾拥有,它能够使try,catch和finally浑然一体,真正算起来,这种操作我们以前从未遇见过。

ROBERT HESS:我认为当应用程序变得越来越复杂时,人们在其中进行错误处理是相当重要的,当企图创建文件或进行类似的操作时,出错的机会可能会很多。尤其是使用其他人的对象和类似的东西时。
    那么,这是不是意味着在编写C#的应用程序时,您必须保证函数和方法都能正确地设置异常并抛出一个异常,以便人们可以捕获它?

JEFFREY RICHTER:嗯,绝对如此。良好的编程典范规定:当编写一个函数时,必须验证所有传递进来的参数,如果任何一个参数不合乎要求,就应当明确地引发一个异常,而在基类库中定义有大量的异常类,所以可以轻而易举地使用其中的一个。但是您同样也有能力定义自己的异常类,或许,要查找数据库中的、顾客(customer),却好象没有发现他们的名字,故可以创建自己的customer异常,并在代码里的某个地方引发它。

ROBERT HESS:或许会用类似customer的名字作为损坏的customer名……

JEFFREY RICHTER:是的,大概这样。如果它是"Robert",就是你一直想要引发的异常。

ROBERT HESS:那么,您认为C#作为一种编程语言将如何发展?当您的客户参加培训时您对他们有什么点拨,他们对此又有什么想法?

JEFFREY RICHTER:嗯,我真的认为它将获得巨大的动力。我说过,去年我一直专门用C#编程,偶尔也用C++,但现在却很少用了,而我相信许多VB程序员也将会转向此语言,因为C#更适合公共语言运行库。所以,我真的认为它将获得巨大的动力,并且真正得到重用。在我的培训班里,似乎每个人都喜欢它,事实上一些人说他们参加这个培训班,只是由于这个班开设了C#编程的课,但很快他们就高兴地发现课程也涵盖了framework和类库。

ROBERT HESS:那么,当谈到.NET framework和类库时,您认为它们怎么样,以及它们是怎样帮助应用程序开发的?

JEFFREY RICHTER:我认为,这个平台表现很出色。我使用整个平台已经一年了,并且我最近一直在为微软开发一个项目,以展示微软的许多技术。我和另外一个家伙一起工作,他的名字叫Tom,我们要在早上碰头,要在电子白板上继续讨论,接着要…… 这里就是我们今天将要补充说明的性能,我们又要讨论一会儿,我们要表示,这就是当天结束时我们的目标,通常在午饭之前我们要全部完工。我们总是超额地完成了任务。

ROBERT HESS:您认为C#和.NET的结合有助于完成工作吗?

JEFFREY RICHTER: 噢,当然。毫无疑问,因为所有的测试都已完成。所有的测试——我们如何公开这个东西,我们能不能使这成为一个方法,能不能把它放在DLL里,能不能使其成变COM 对象,我们应拥有什么类型的接口。所有的这些问题涉及到您如何把这些连接起来并传递指针,保持连接以便可以同步,所以您就可以通过保持和其他人同步来通知他们,所有这些论点都刚刚被引进该平台。因此,自始至终地,我们愿意工作一个小时,我们要完成某项工作,我们会……,然后我们又要坐回去并开始增加其它的东西。我们的生产率如何,确实令人难于置信,而且也同样充满着乐趣。我们确实增加了惊人的图形图像库和alpha混色(blending)以及所有类型的东西,这些以前我们从未处理过alpha混色此类东西。我曾经从事过图形图像的工作,但已经过了好多年了。而利用相应名字空间中的system.drawing语句,我们就能够构造这些图像并对它们进行覆盖和alpha混色,然后又从我们的web服务器返回这些图像给在任何机器上运行的任一客户,甚至不必是一台Windows机器。

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:使用alpha混色。

JEFFREY RICHTER:嗯,对,使用alpha混色。于是,这些信息被送回web窗体,送回运行在任何机器上的客户。我们甚至可以增加这样的功能,当鼠标移到某东西上方时,提示工具将会显现并告诉您该网页上相应的学校名和医院名。此范例功能之强大,简直令人无法相信。事实上客户可以是运行任何操作系统的任何机器,并且我们在服务器端利用Windows 2000的GDI+性能处理alpha混色,以及此类高级图形操作,不过我们只把位图(bit map)送回给客户,我再次认为,其功能之强大、生产率之高,简直令人信难于置信。而且我也了解到许多应用正在朝这个方向发展。

ROBERT HESS:所以您真的很喜欢web应用程序的整个web模型。
JEFFREY RICHTER: 喜欢。

ROBERT HESS:即使您是一个传统的Windows应用程序开发者。
JEFFREY RICHTER: 是的。

ROBERT HESS:您现在已横下心来要朝这个方向发展了。

JEFFREY RICHTER:是的,我已下决心了。程序要能在任何地方运行,并在服务器上进行工作。所有的这些便构成了所谓的分布式系统(distributedness),服务器可以位于三台不同的机器,噢,维护所有的这些资料的SQL Server还可以是另一台机器,web 窗体服务器也位于不同的机器,并且还可以被不同的公司细调以便随意使用这些材料,他们觉得这些材料适合于生成内容丰富的应用程序,而这些程序运行在能被internet访问到的任何地方。这简直令人难于置信,确实难于置信!

ROBERT HESS:某些迹象告诉我,所有的这些东西给您留下了现象。

JEFFREY RICHTER:是的,有点。

ROBERT HESS:那么,对于观众中跃跃欲试的开发人员,他们想要投身于C#,并要开始编写一些.NET应用程序,在他们跨出第一步之前,需要真正地了解什么?您认为最后还有什么要强调的?

JEFFREY RICHTER:我认为,这些开发人员即将面临的一个最大问题就是,他们必须认识到是C#语言揭示了runtime和基类库中的性能,或许假以时日他们会从经验中学到。而许多人将会关注C#,也可能他们会试一试,或关注其它的.NET语言,也有可能会企图做一些不被这些语言所支持的事,接着当然认为这是不可能的。例如:在C#中,所有的数组默认都是基于0的,是以0索引(下标)开始的。但是公共语言运行库支持数组有任何的下边界和上边界。在基类库中构造了一个数组,它具有所设定的上下边界。但是C#自然不提供这些功能。因此,您必须去学习,随着时间的推移,就会了解它是什么,很多时候您或许可以使用其它语言,或者去访问语言的底层系统,语言是位于runtime顶端的,由于某些原因,设计者不让我们去访问底层系统。

ROBERT HESS:似乎就是这样,通过理解runtime底层的所有性能,然后您就可以把这些性能映射(map)给您目前正在使用的任何语言,以便了解它们是否提供给您所需要的功能。例如,我写网页时总是用纯粹的HTML编写,因为我知道它的具体功能是什么。但是假如我必须用FrontPage写,我知道FrontPage有它自己的格式(mindset),关系到网页的显示,并且我知道它能给我提供什么,不能提供什么。偶尔我也不得不转回纯粹的HTML并按这种方式增加某些东西或其它工具,这似乎是同样的事情。

JEFFREY RICHTER:有时在C#中也有这些功能,但却以不同的名字出现,例如,在公式语言库中,虚拟函数被称为family 。于是要在C#中创建一个虚拟函数,就会用protected 限定。对,或不用protected,但是在C#中的protected是等价于公共语言运行库中的family的。噢,搞混了。看看,连我自己也糊涂了。

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技术的开发资料。

C#新闻组(C# Newsgroup,news://msnews.microsoft.com/microsoft.public.dotnet.languages.csharp)
与正在学习使用C#的人互相讨论、互相请教。

有关Jeffrey Richter谈话的资料:
代码范例(Sample Code:地址不详)
书: Programming Applications for Microsoft Windows
     Programming Server-Side Applications for Windows
(和Jason Clark合写)
Wintellect(http://www.wintellect.com/,)
Jeffrey 的培训和咨询公司。
TerraServer.NET(http://terraserver.microsoft.net/)
Jeffrey帮助编写的mapping服务。
Jeffrey Richter的主页(http://www.jeffreyrichter.com/)

时间: 2024-11-02 11:39:25

转贴:MSDN访谈录C#编程之四的相关文章

转贴:msdn 访谈录之C#编程三

编程 标题    msdn 访谈录之C#编程    rainbow(翻译)关键字    C#,JEFFREY RICHTER出处    http://www.mdsn.com[TR] 程序员天地Robert Hess和Jeffrey Richter(著名的编程作家.专栏作家和咨询专家)的谈话.ROBERT HESS: 欢迎回来.我们正要涉及到有关C#编程方面的问题.为了有助于我们理解这些问题,我邀请我的好朋友Jeffery Richter到这里来.Jeffery恰好是一名撰写了很多编程书籍的程序

转贴: MSDN 访谈录之C#编程一 rainbow(翻译)

编程 标题    MSDN 访谈录之C#编程一    rainbow(翻译)关键字    C#,msdn出处    http://www.msdn.com MSDN 访谈录(MSDN Show)  C#编程 C#是一种令人耳目一新且为之一振的编程语言,它设计给C++程序员带来快速的开发能力,而又不牺牲C和 C++所特有的功能和控制.    在今天的这一期里,我们将要和Anders Hejlsberg交谈,他是微软一位资深的工程师,一直帮助设计.开发和实现该语言,并发挥其在未来.NET平台中的作用

iOS网络编程之四——请求类NSURLRequest使用详解

iOS网络编程之四--请求类NSURLRequest使用详解 一.引言         在前面几篇博客中,介绍了iOS开发中的网络编程相关内容并且介绍了常用了两个平行的网络框架NSURLSession和NSURLConnection.无论是NSURLSession类还是NSURLConnection类,其网络请求都是通过NSURLRequest类进行发起的,本篇博客将介绍NSURLRequest类的用法和其中请求属性的设置.         前几篇博客地址如下: 1.iOS网络框架介绍:http

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到)       继上两篇:ORACLE PL/SQL编程之八:把触发器说透             ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)  得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.     本篇主要内容如下: 4.1 游标概

Android编程之四种Activity加载模式分析_Android

本文分析讲述了Android编程之四种Activity加载模式.分享给大家供大家参考,具体如下: Activity状态 一般认为Activity有以下四种状态: ① 活动的:当一个Activity在栈顶,它是可视的.有焦点.可接受用户输入的.Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用.当另外一个Activity被激活,这个将会被暂停. ② 暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了.有可

Android编程之四种Activity加载模式分析

本文分析讲述了Android编程之四种Activity加载模式.分享给大家供大家参考,具体如下: Activity状态 一般认为Activity有以下四种状态: ① 活动的:当一个Activity在栈顶,它是可视的.有焦点.可接受用户输入的.Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用.当另外一个Activity被激活,这个将会被暂停. ② 暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了.有可

转贴:MSDN访谈录之C#编程二

编程 ROBERT HESS:C#被认为是微软的私有语言吗? ANDERS HEJLSBERG:其实并非如此.我们与产业伙伴特别是HP和Intel合作,今年年初,我们向一个叫做ECMA(欧洲计算机制造商协会)的欧洲标准化组织提交了建议,以便标准化C#和CLI. CLI代表通用语言基层体系(Common Language Infrastructure). ROBERT HESS:而这是不是有点类似于C Runtime 和VB Runtime? ANDERS HEJLSBERG:嗯,实际上CLI是.

C语言控制台窗口图形界面编程之四 常用的文本输出函数

文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下: BOOL FillConsoleOutputAttribute( // 填充字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttribute, // 文本属性 DWORD nLength, // 个数 COORD dwWriteCoord, // 开始位置 LPDWORD lpNumberOfAttrsWritten // 返回填充的个数 ); BOOL FillConsoleOutput

javascript面向对象编程之四 function也是”类”

function在javascript中用来创建函数或方法,但要想实现面向对象方式的编程,类是不可或缺的角色之一,而且是主角.但javascript中并没有类概念,所谓的类也是模拟而来,通过函数加闭包模拟出类成员及私有成员(关于闭包可以参见跨越边界: 闭包).这里我们将用比较平实的方式来了解一下javascript中的"类",避开一些生硬的原理. 既然是用function来模拟类,所以编写代码创建类的关键字还是function.我们创建一个座标点类. function Point()