⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c#网络编程宝典(1).txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
📖 第 1 页 / 共 2 页
字号:
C#网络编程宝典(1)
 

--------------------------------------------------------------------------------
 
第八军团 时间:2003-11-23 9:16:37 
   
从这一期起,我们将通过一系列文章来详细介绍如何利用C#开发网络应用程序。C#,读作“C-Sharp”,是微软推出的新一代软件开发语言。或许你会问,目前已经有了这么多开发语言,如Visual C++、Visual Basic、Java等,为什么还要推出C#呢?下面就来先解答一下这个问题。
简单地说,C#是未来的主流开发语言。因为在未来的企业计算领域,C#将会成为用于编写“下一代窗口服务”(Next Generation Windows Services,简写为NGWS)应用程序的主要语言。C#是专门为.NET平台度身定做的一种开发语言,它既拥有Visual Basic简单易用的特性,同时又具备Visual C++强大的功能。此外,C#背靠微软,微软为.NET框架投入的人力和物力比已往任何一个系统都多也是一个不争的事实。虽然目前使用C#开发应用程序并不普遍,但可以预见,随着下一个视窗操作系统——Windows .NET Server的推出,.NET框架将内嵌在操作系统之中,C#必定有着更广大的发展空间,所以对于程序员,尤其是那些将要加入程序员行列的人而言,C#是一个非常明智的选择。
一、C#——一种新的开发语言
虽然C#是从C/C++家族中演化而来的,如C#和C++的百分之九十九的语法都相同,但作为一种全新的开发语言,C#比C++有更多的优点。下面就通过它和C++比较,看看它到底“新”在哪里:
●简洁实用
C#和C++相比较,最大的特点就是简洁与实用。首先,使用C#的开发者再也不必担心C++中的内存管理和指针之类的烦杂问题。其次,C#中的操作符与C++相比大大地减少了。比如,C++中关于类成员及类方法有“::”、“.”和“->”三种操作符,分别用于不同的环境,而C#中只要用“.”操作符就可以了。由于C#使用统一的类型系统,它彻底摒弃了C++中多变的类型系统。C#也彻底解决了存在于C++中已经有些年头的冗余的东西,如常数预定义、不同字符类型等。
●流行现代
学习并掌握C#要花费很多的时间和精力,但绝对是一笔很值得的投资。因为C#是为编写NGWS应用程序的主要语言而设计,掌握了C#也就掌握了未来的编程语言的主流。使用过C#的程序员会发现很多用C++实现起来非常困难的功能,在C#中不过是一个基本的功能而已。同样,如果你是一个企业级的程序员,一定非常喜欢新增的金融数据类型。这是一种新的十进制数据类型,它专用于金融计算方面。C#同样允许程序员根据自己的爱好或者特殊的需要,非常容易地创建出新的一种数据类型。C#能够保证编写的应用程序更安全。这是因为C#提供了元数据语法,用于声明下述NGWS安全模式的能力和许可。元数据是NGWS运行时的一个关键的概念,它是描述和引用VOS(虚拟对象系统,Virtual Object System)类型系统所定义的一种类型。其永久格式与编程语言无关。
●完全面向对象
C#是一个完全的面向对象开发语言,支持面向对象的所有关键概念,如封装、继承和多态性。完整的C#类模式构建在NGWS运行时的虚拟对象系统(简称VOS,Virtual Object System)的上层,所以对象模式只是基础的一部分,不再是编程语言的一部分。在C#中不再有什么全局函数、变量或者是常量。所有的东西都封装在类中。这些使得C#代码更加易读且有助于减少潜在的命名冲突。
●安全可靠
C++中,指针能自由地强制转换成为任何类型,甚至可以实现把int *(整型指针)强制转换成一个double *(双精度指针)。当然这需要内存支持这种操作。但这决不是你所想象的企业级编程语言的类型安全。C#实施最严格的类型安全,以保证应用程序及垃圾收集器(garbage collector)能够正确运行。如在C#中不能使用没有初始化的变量。对于对象的成员变量,编译器负责清零。而局部变量,则由程序员负责清零。当程序中使用一个没有初始化的变量时,编译器会发出提示,并引导你如何做。这样就能够避免由于使用不经初始化的变量计算结果而导致的错误,而这些错误是很难发现的。C#取消了不安全的类型转换,比如你不能把一个整型强制转换成一个引用类型(如对象)。边界检查是C#类型安全的一部分。数组定义了n-1个元素却超额地使用了n个元素的情况在C#中是不会出现。C#通过在语句级或应用程序级来检测,算术运算是否溢出终值数据类型的范围。在允许检测溢出的情况下,当溢出发生时将会抛出一个异常。在C#中,被传递的引用参数是类型安全的。
●版本可控
几乎所有的程序员都遇到过“DLL陷阱”的头疼事情。问题起因于多个应用程序都安装了相同名字DLL的不同版本。有时,老版本的应用程序可以很好地和新版本的DLL一起工作,但是更多的时候它们会中断运行。C#可以最好地支持版本控制。尽管C#不能确保正确的版本控制,但是它可以为程序员保证版本控制成为可能。有这种支持,一个开发人员就可以确保当他的类库升级时,仍保留着对已存在的客户应用程序的二进制兼容。
●兼容性
C#虽然是开发NGWS应用程序的主要语言,但也可以方便的通过互操作来访问现有的COM组件和Win32 API函数,这样就能够最大程度的利用现有的资源。
上面描述了C#的种种优点,那么或许你会问,C#最终会取代C++么?其实不然。答案非常明显,第一,C++已经发展了许多年了,有大量的使用者,这些资源不容浪费。第二,C++在性能和对底层控制上的能力是C#难以比拟的。所以说C#虽有优点,但C++也不是没有长处,在可以预见的将来,它们将会相处很长时间。
综上所述,C#是一种优雅、简单、类型安全、面向对象的语言,C#的语言特色都和.NET平台有着密不可分的关系,比如C#本身无类库,它使用的是.NET FrameWork SDK所提供的类库——.NET FrameWork SDK。此外,C#拥有的类型安全检验、垃圾的自动回收以及结构化的异常处理等操作,也都是直接交给.NET平台中的通用语言运行时(Common Language Runtime,简称CLR)来处理的。所以说C#是最适合开发.NET平台下的应用程序的程序语言。
二、用C#编写“Hello World!”
当开始介绍一种新的语言的时候,好像已经成为了一种约定,都是从编写输出字符串“Hello World!”的程序开始的(顺便插一句:有人说程序员都很古板,我看不一定,“Hello World!”不就充分体现出程序员的浪漫情怀)。本节便来介绍一下C#是如何编写、编译“Hello World!”程序的。
我编写、调试和运行的软件环境为:视窗2000服务器版、.NET FrameWork SDK 1.0正式版。在.NET FrameWork SDK 1.0正式版中不仅提供了类库和编译器,还提供了编写、构建、测试和部署.NET 框架应用程序所需的文档、示例代码、命令行工具。你可以从地址http://www.microsoft.com/china/msdn/downloads/msdncompositedoc.asp中下载这个软件开发包。.NET FrameWork SDK 1.0正式版可是一个131M的大文件,要下载的朋友可要有点心理准备。要安装.NET FrameWork SDK 1.0正式版,必须保证你的操作系统是下列之一:
(1)Microsoft Windows NT 4.0(需要安装SP 6a)
(2)Microsoft Windows 2000(建议使用SP2)
(3)Microsoft Windows XP Professional
(4)Microsoft Windows .NET Server
系统还必须满足下列软件要求:
(1)IE 5.01版(推荐使用IE 6.0)。
(2)Microsoft Data Access Components 2.6(MDAC2.6),推荐采用MDAC 2.7。
(3)Internet Information Services(IIS)5.0版或更高版本。
现在我们开始编写C#版本的“Hello World!”程序。首先打开一个文本编辑器,你可以使用Windows自带的NotePad或者其他的行编辑器,把下列的代码输入到编辑框中。请注意,代码中每一行前面的数字代表行号,是为方便后面的程序说明而添加上的,实际输入时应该忽略掉这些数字:
1   using System;
2   namespace temp
3   {
4       class HelloWorld
5       { 
6           public static void Main()
7           {
8               Console.WriteLine (" Hello World ! ") ;
9           } 
10      }
11  }
然后把文件另存为HelloWorld.cs文件(注:"cs"是C#源文件的扩展名)。这样"Hello World!"程序的C#版本就产生了。虽然HelloWorld.cs非常短小,但基本具备了C#程序的框架结构,下面就结合HelloWorld程序来具体探讨一下。
第1行的作用是告诉编译器,此程序要引用命名空间“System”。引用命名空间使用的是“using”关键字。至于在哪个文件中找“System”命名空间,是通过编译的时加入“r”参数实现的,具体可参见下面的编译命令。引入“System”命名空间,是为了达到简化后面程序编码的效果。这是因为后面使用到的“Console”类就被封装在“System”命名空间中。引用命名空间后,再调用Console类中的WriteLine方法时,就可以直接用Console.WriteLine来代替System.Console.WriteLine了。由于HelloWorld程序的代码量很小,简化编码的效果并不明显,但对于代码量大、使用了许多命名空间的程序,这种简化作用就非常明显了。由于引用命名空间所起的只是简化编码的作用,所以这一行代码并不是非要不可的。
第2行是在C#程序中定义命名空间,这里的命名空间的名称可以看成和上面的“System”命名空间相类似。其实定义命名空间对于“Hello World!”程序是没有什么太多意义的,因为“Hello World!”程序从本质上是一个控制台程序。而定义命名空间主要的作用是声明一个范围,此这个范围允许组织代码并为你提供了创建全局唯一类型的方法。在C#组件编程中,定义命名空间是很有意义的,因为在一个命名空间中,可以在定义若干个类。所以定义命名空间这一句,对于“Hello World!”程序也不是非要不可的。
第4行是在程序中创建一个类,类的创建过程对于“Hello World!”程序是必须的,因为C#程序的入口函数Main()就必须位于类或者结构体之中。当然这个类的名称,在“Hello World!”程序中是可以随意设定,这都不妨碍程序的正确编译和执行,但如果编写的程序要编译成的是类库文件,就必须要明确定义的类的名称,因为在程序调用的时候要使用这个名称。这是后话了。
第6行是申明Main()函数(也叫Main方法),Main()函数是编译器规定的所有可执行程序的入口点,并控制程序的开始和结束,用户在Main函数中创建对象和执行方法。由于Main()函数的特殊性,Main()函数在程序中必须遵循下列原则:
1.Main()函数必须封装在类或结构里来提供可执行程序的入口点。
2.Main()函数必须是一个静态函数(static)。正如前文所说,Main()函数也可以看成是一个方法,而这个方法就被封装在HelloWorld类中。把Main()函数定义为静态函数,就意味着,在C#中不用创建实例就可以调用此方法。
3.Main()函数对于保护级别没有特殊要求,public、protected、private等都可以,但一般都指定其为public,有些时候还不指定保护级别。
4.C#对大小写非常敏感,无论是引用命名空间,调用类库等。书写不正确则编译器无法识别,并返回错误值。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -