21天学通C#
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 第一个Windows应用程序

Windows Forms就是Windows窗体的意思。它是.NET Framework的一部分。程序在运行时,每一个窗体都是可视化的。其定义了窗体外观属性、行为、方法和与用户交互的事件。在Visual Studio 2010中通过设置窗体属性和编写代码来响应窗体事件,可以开发出一些基本的窗体应用程序。Windows窗体还能作为其他控件的容器,开发者可以将控件拖放在Windows窗体上,如Button(按钮)、TextBox(文本框)等。

1.4.1 什么是Windows应用程序

这里的Windows应用程序指Windows窗体应用程序,也可以指服务在操作系统底层,看不见运行界面的程序,这是一个较开放的概念。总的来说,它是运行在Windows平台上的程序,用于服务用户,其定义了窗体的外观属性、行为方法与用户交互事件等。设计者可以通过修改窗体的属性或者添加代码来响应窗体的事件。例如记事本就是一个窗体程序,它就是一个Windows应用程序。

注意:控制台程序是Windows系统组件的一部分,而Windows应用程序是指可以在Windows平台上运行的所有程序。不同的地方在于一个是Windows系统自带的;另一个可能是第三方开发的,也可能是Microsoft公司自己开发的。

1.4.2 开发Hello World Windows应用程序

启动Visual Studio 2010,依次选择“文件”|“新建”|“项目”命令,弹出如图1.16所示的对话框。展开“已安装的模板”中“Visual C#”节点。然后选择“Windows”|“控制台应用程序”命令。输入应用程序的名称,选择合适的路径保存。

图1.16 创建Hello Word窗体应用程序

提示:在创建应用程序时,请选择好所需的.NET Framework的环境版本,如图1.16右上角所示。本书中将以.NET Framework 4.0版本为例进行讲解,它是目前Visual Studio 2010集成开发环境中默认支持的最高版本。

范例1-1】创建Hello Word窗口应用程序,其功能是在控制台中输出“Hello World”字符串,如示例代码1-1所示。

示例代码1-1

        01  using System;                              //包含基本类和基类
        02  using System.Collections.Generic;          //定义泛型集合的接口和类
        03  using System.Linq;                         //支持语言集成查询
        04  using System.Text;                         //包含用于字符编码等功能的对象
        05  namespace Ex_1_1                           //类命名空间,也是项目名称
        06  {
        07     class Program
        08     {
        09         static void Main(string[] args)      //主函数,入口函数
        10         {
        11            Console.WriteLine("Hello World"); //输出“Hello World”字符串
        12            Console.ReadLine();               //获取输入焦点,这里为了运行结果在DOS
                                                      //窗口中停留
        13         }
        14     }
        15  }

【运行结果】选择“调试”|“启动调试”命令运行程序,结果如图1.17所示。

【代码解析】该段代码第09行~13行是C#程序必须包含的Main方法,用于控制程序的开始和结束。在Main方法中创建对象和执行其他方法。第11行语句Console.WriteLine("Hello World")使用了WriteLine方法,该方法用于输出字符串和字符等,输出信息后面跟一个新的行,即换行。

图1.17 Hello World运行结果

第09行是Main方法,它是C#语言中所有程序的入口点。但是,库和服务不要求将Main方法作为入口点。应用程序启动时,Main方法是第一个调用的方法。C#程序中只能有一个入口点。如果有多个类都包含Main方法,则必须使用“/main”编译器选项编译,指定一个用做入口点的Main方法。

注意:所有的C#源代码都以语句“using System;”开头,这是因为Microsoft公司提供的许多有基类的基本类都包含在System命名空间中。如果程序开始处没有包含“using System;”指令,则输出语句必须这样写才能编译通过System.Console.Writeline。如果包含了“System”命名空间,无须完全限定System类和方法即可直接使用它们。例如可以改写为“Console.WriteLine”,而不必写成“System.Console.Writeline”。

在范例1-1中,using System表示导入名字空间,其他的类似。高级语言总是依赖于许多系统预定义的元素或者库函数,例如在范例1-1中的输出函数就依赖于System命名空间。如果是C或C++程序,那么就使用#include之类的语句来导入。在C#语言中的含义与此类似,其用于导入预定义的类或者函数,这样在自己的程序中就可以自由地使用这些元素。如果没有导入名字空间的话,就必须把上述代码改写成如下所示。

        01  namespace Ex_1_1                                    //类命名空间,也是项目名称
        02  {
        03     class Program
        04     {
        05         static void Main(string[] args)               //主函数,入口程序
        06         {
        07            System.Console.WriteLine("Hello World");   //输出Hello World
        08            System.Console.ReadLine();                 //获取输入,这里是为了运行
                                                                //结果窗口停留
        09         }
        10     }
        11  }

提示:在每个Console前加上一个前缀System.,这个小圆点“.”表示Console是作为System的成员而存在的。关于成员的概念,初学者可以把它理解为某某的一个组成部分。在本书第4章,成员的概念会使用得比较多。

在C#语言中,程序所完成的输入输出功能都是通过Console来完成的,Console是在名字空间中System已经定义好的一个类。这里不用管它是怎么完成工作的,只要使用它就可以了。上面的代码中,类Console展现了两个最基本的方法WriteLine和ReadLine。

Console.ReadLine()表示接收输入设备,Console.WriteLine用于在输出设备上输出。Console中用于输入/输出的另两个方法是Read和Write。它们和ReadLine与WriteLine的不同之处在于:ReadLine和WriteLine执行时相当于在显示时多加了一个Enter键。而使用Read和Write时则光标不会自动转移到下一行。

警告:在C#程序中,程序的执行总是从Main()方法开始的,一个程序中不允许出现两个或两个以上的Main()方法。对于习惯了写C语言的读者,请务必记住:C#语言中Main()方法必须被包含在一个类中。