1.4 C#程序举例
1.4.1 一个控制台程序
下面从经典的“Hello World”程序开始C#之旅。在控制台中输出“Hello World”字样。
【例1-1】 使用VS 2013在控制台中创建“Hello World”程序并运行,具体开发步骤如下。
(1)在开始菜单中打开VS 2013开发环境,选择VS 2013菜单栏中的“文件”|“新建”|“项目”命令,打开“新建项目”对话框,如图1-26所示。
图1-26 “新建项目”对话框
(2)在“新建项目”对话框中选择“控制台应用程序”,输入项目的名称,选择项目保存路径,然后单击“确定”按钮,即可创建一个控制台应用程序。
(3)控制台应用程序创建完成后,会自动打开Program.cs文件。在该文件的Main方法中输入如下加粗显示的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hello World
{
class Program
{
static void Main(string[] args) //Main方法,程序的主入口方法
{
System.Console.Write("Hello World"); //输出“Hello World”
System.Console.Read Line(); //通过等待输入而暂停程序运行
}
}
}
单击VS 2013开发环境工具栏中图标按钮,或者直接按<F5>快捷键,运行该程序,效果如图1-27所示。
图1-27 输出“Hello World”
C#的Hello World
1.4.2 一个简单的Win 32应用程序
【实例1-2】 设计一个C# Windows窗体应用程序,实现图1-28所示的效果。
【操作步骤】 详细操作步骤如下。
(1)启动VS 2013。
(2)新建项目。
首先,选择“文件”|“新建”|“项目”菜单命令;弹出“新建项目”对话框后,在左侧列表框中选择“已安装”|“模板”|“Visual C#”|“Windows”,同时在中间列表框中选择“Windows窗体应用程序”。
然后,输入项目名称(如Test1_2)并设置保存位置,单击“确定”按钮。
之后,系统自动完成项目的配置(包括:完成对.NET Framework类库的引用、生成包含Main方法的 Program.cs 文件、生成 Windows 窗体文件 Form1.cs、生成项目有关的属性文件Asembly Info.cs和Resources.resx等)。
(3)修改源程序文件名并编辑源程序。
首先,在解决方案资源管理器中右击“Form1.cs”,选择“重命名”快捷菜单命令,将Form1.cs修改为Test1_2.cs。
然后,在VS 2013的设计区中右击鼠标,选择“属性”快捷菜单命令,以打开窗体的“属性”窗口;在属性窗口中单击“事件”按钮,以显示窗体的所有事件列表;双击事件列表中的“Load”事件,由系统自动创建事件方法Test1_2_Load(如图1-29所示),并且自动切换到Test1_2.cs的源代码编辑视图。
图1-28 一个简单的Windows应用程序的运行效果
图1-29 添加Load事件
最后,在Test1_2.cs文件的源代码编辑窗口中添加以下源程序代码。
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Test1_2
{
public partial class Test1_2 : Form
{
public Test1_2()
{
Initialize Component();
}
private void Test1_2_Load(object sender, Event Args e)
{
//设置本窗体的标题文字
this.Text = "我的第一个Windows程序";
//先创建标签控件,再设置其显示文本和位置等属性
Label lbl Show = new Label();
lbl Show.Location = new Point(50, 60);
lbl Show.Auto Size = true;
lbl Show.Text = "本程序由罗福强设计,欢迎您使用!";
//将标签控件添加到本窗体之中
this.Controls.Add(lbl Show);
}
}
}
(4)调试并运行程序。
选择“调试”|“启动调试”菜单命令或“调试”|“开始执行(不调试)”菜单命令,之后VS 2013将自动启动C#语言编译器编译源程序,并执行程序,最后弹出一个如图1-28所示的运行窗口。
【分析】
(1)在设计C# Windows窗体应用程序时,既要考虑窗体类的名字(如Test1_2),也要必须考虑对.NET Framework 类库的适当引用。Windows 窗体应用程序的基础是命名空间System.Windows.Forms和System.Drawing,在代表程序窗口的源代码文件中必须包含这些命名空间,否则将出现编译错误。为了简化源代码编写,VS 2013会自动完成这些必不可少的命名空间的引用。
(2)Windows窗体应用程序的主程序文件仍然是Program.cs,该文件具有Main主方法。因为C#的Windows应用程序同样是从Main方法开始执行的。由于VS 2013会自动根据程序员的操作来更新Main方法中的语句,因此不需要在Main方法中添加任何代码。
(3)对于Windows窗体应用程序来说,其主要代码包含在代表程序窗口的文件(例如Form1.cs,改名之后为Test1_2.cs)中。Windows应用程序采用事件驱动编程,只有当事件发生时系统才可能调用相应的事件方法。例如,如果希望在窗体的Load(即加载)事件发生时应用程序能够调用事件方法Test1_2_Load,那么就必须把窗体的Load属性与Test1_2_Load_Load方法链接起来。只是,这个链接操作通常由VS 2013自动完成。因此,我们只需要集中精力编写事件方法中的语句即可。有关事件的概念,在本书后续章节会详细讲解,读者只需对事件有一个感性认识就可以了。
(4)Test1_2_Load事件方法
第一条语句用来设置窗口标题。其中,“this”代表本窗体。
第二条语句的作用是创建一个用来显示提示信息或程序运行结果的标签对象。其中,Label就是标签控件的类名,“new Label()”创建标签对象,“lbl Show”就是标签对象的名字。
第三条语句用来设置标签在窗体中的显示位置。“new Point(40, 50)”表示在窗口中的像素点(50,40)起显示。
第四条语句用来指示系统是否自动改变标签的大小,“=true”就是确保把所有的文字显示出来。
第五条语句用来设置最终窗口中显示的文字。
第六条语句表示将标签对象lbl Show添加到窗体中,实现显示输出。
1.4.3 一个具有输入功能的Win 32应用程序
【实例1-3】 设计一个C# Windows应用程序,实现如图1-30所示的效果。
图1-30 一个具有输入功能的Win32应用程序
【操作步骤】详细操作步骤如下。
(1)启动VS 2013。
(2)新建项目
首先,选择“文件”|“新建”|“项目”菜单命令;弹出“新建项目”对话框后,在左侧列表框中选择“已安装”|“模板”|“Visual C#”|“Windows”,同时在中间列表框中选择“Windows窗体应用程序”。
然后,输入项目的名称(如Test1_3),设置项目的保存位置(如d:\Demo)。
单击“确定”按钮之后,系统自动完成项目的配置、自动生成有关文件(详细情况见上一小节)。
(3)修改源程序文件名
在解决方案资源管理器中右击“Form1.cs”,选择“重命名”命令,将Form1.cs修改为Test1_3.cs。
(4)添加用户控件并设置控件属性
首先,从VS 2013的工具箱把下列控件添加到设计区:2个Label控件、1个Text Box控件和1个Button控件,各控件在窗体中的位置见图1-31所示(提示,在工具箱中展开“所有Windows控件的图标为“”,Button控件的图标为“”。控件”或“公共控件”即可找到相应的控件)。在工具箱中,Label控件的图标为“”,Text Box
然后,在设计区右击窗体或所添加的每一个控件,选择“属性”命令,打开“属性”窗口(如图1-32所示),根据表1-5设置相应属性项。
图1-31 窗体设计
图1-32 “属性”窗口
表1-5 需要修改的属性项
(5)为控件添加事件方法
首先,在窗体设计区中双击新添加“btn Ok”按钮控件,系统自动为该按钮添加“Click”事件,对应的事件方法“private void btn Ok_Click(object sender, Event Args e)”,并切换到Hello Frm.cs的源代码编辑视图。也可以在该按钮的属性窗口的事件列表中双击“Click”事件,添加btn Ok_Click事件方法。
然后,在Test1_3.cs文件的源代码编辑窗口中添加以下源程序代码。
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Test1_3
{
public partial class Test1_3 : Form
{
public Test1_3 ()
{
Initialize Component();
}
private void btn Ok_Click(object sender, Event Args e)
{
//定义字符串变量
string str Result;
//提取在文本框中录入的文字
str Result = txt Name.Text + ",你好!欢迎使用本程序!";
//显示结果
lbl Result.Text = str Result;
}
}
}
(6)调试并运行程序
选择“调试”|“启动调试”菜单命令或“调试”|“开始执行(不调试)”菜单命令,之后VS 2013将自动启动C#语言编译器编译源程序,并执行程序,当弹出运行窗口后在文本框中输入姓名后即可得如图1-30所示的运行效果。
【分析】
(1)对于Windows窗体应用程序来说,窗体控件组成了程序运行时的操作界面。窗体中的控件可以在程序运行时才添加到窗口中(如实例1-2所示),也可以在运行前完成所有设计(如本例所示)。
(2)Windows窗体最常用的控件有:Label控件、TextBox控件和Button控件。其中,Label控件(即标签控件),一般用来显示提示信息或程序的运行结果;TextBox控件(即文本框控件),用来接收用户的键盘输入;Button控件(即按钮控件),用于响应鼠标单击操作,触发单击事件并通知系统调用特定的方法(如本例的btn Ok_Click事件方法)。
(3)事件方法btnOk_Click
第1条语句定义了一个字符串型的变量str Result,用来保存程序最终要显示的字符串。
第2条语句用来生成最终要显示的字符串。其中,txt Name.Text表示引用在文本框中所输入的文本内容;“+”表示连接两个字符串。
第3条语句表示把变量str Result的字符串内容赋值给lbl Result标签控件的Text属性,实现显示输出。
有关字符串、赋值等内容的详细介绍请读者阅读本书后续章节。
1.4.4 C#程序的基本结构
上面讲解了如何创建第一个C#程序。一个C#程序总体可以分为命名空间、类、关键字、标识符、Main方法、语句和注释等。本节将分别对C#程序的各个组成部分进行讲解。
1.命名空间
在Visual Studio开发环境中创建项目时,系统会自动生成一个与项目名称相同的命名空间,例如,创建“Hello World”项目时,系统会自动生成一个名称为“Hello World”的命名空间。代码如下。
namespace Hello World
命名空间在C#中起到组成程序的作用,在C#中定义命名空间时,需要使用namespace关键字,其语法如下。
namespace 命名空间名
命名空间既用作程序的“内部”组织系统,也用作向“外部”公开的组织系统(即一种向其他程序公开自己拥有的程序元素的方法)。如果要调用某个命名空间中的类或者方法,首先需要使用using指令引入命名空间,这样,就可以直接使用该命名空间中所包含的成员(包括类及类中的属性、方法等)。
using指令的基本形式为:
using 命名空间名;
2.类
C#程序的主要功能代码都是在类中实现的,类是一种数据结构,它可以封装数据成员、方法成员和其他的类。因此,类是C#语言的核心和基本构成模块。C#支持自定义类,使用C#编程就是编写自己的类来描述实际需要解决的问题。
使用类之前都必须首先进行声明,一个类一旦被声明,就可以当作一种新的类型来使用,在C#中通过使用class关键字来声明类,声明语法如下。
class [类名]
{
[类中的代码]
}
3.关键字
关键字是C#语言中已经被赋予特定意义的一些单词,开发程序时,不可以把这些关键字作为命名空间、类、方法或者属性等来使用。大家在Hello World程序中看到的using、namespace、class、static和void等都是关键字。C#语言中的常用关键字如表1-6所示。
表1-6 C#常用关键字
4.标识符
标识符可以简单地理解为一个名字,主要用来标识类名、变量名、方法名、属性名和数组名等各种成员。
C#语言规定标识符由任意顺序的字母、下划线(_)和数字组成,并且第一个字符不能是数字。另外,标识符不能是C#中的保留关键字。
下面是合法标识符。
_ID
name
user_age
下面是非法标识符。
4k //以数字开头
string //C#中的关键字
说明
C#是一种大小写敏感的语言,例如,“Name”和“name”表示的意义是不一样的。
5.Main方法
每一个C#程序中都必须包含一个Main方法,它是类体中的主方法,也叫入口方法,可以说是激活整个程序的开关。Main方法从“{”号开始,至“}”号结束。static和void分别是Main方法的静态修饰符和返回值修饰符,C#程序中的Main方法必须声明为static,并且区分大小写。
Main方法一般都是创建项目时自动生成的,不用开发人员手动编写或者修改,如果需要修改,则需要注意以下3个方面。
● Main方法在类或结构内声明,它必须是静态(static)的,而且不应该是公用(public)的。
● Main的返回类型有两种:void 或 int。
● Main方法可以包含命令行参数string[] args,也可以不包括。
6.C#语句
语句是构造所有C#程序的基本单位,使用C#语句可以声明变量、常量、调用方法、创建对象或执行任何逻辑操作,C#语句以分号终止。
例如,在Hello World程序中输出“Hello World”字符串和定位控制台的代码就是C#语句。
Console.Write Line("Hello World");
Console.Read Line();
注意
C#代码中所有的字母、数字、括号以及标点符号均为英文输入法状态下的半角符号,而不能是中文输入法或者英文输入法状态下的全角符号。
7.注释
注释是在编译程序时不执行的代码或文字,其主要功能是对某行或某段代码进行说明,方便代码的理解与维护,或者在调试程序时,将某行或某段代码设置为无效代码。常用的注释主要有行注释和块注释两种,下面分别进行简单介绍。
(1)行注释
行注释都以“//”开头,后面跟注释的内容。例如,在Hello World程序中使用行注释,解释每一行代码的作用。代码如下。
static void Main(string[] args) //程序主入口方法
{
Console.Write Line("Hello World"); //输出“Hello World”
Console.Read Line();
}
(2)块注释
如果注释的行数较少,一般使用行注释。对于连续多行的大段注释,则使用块注释,块注释通常以“/*”开始,以“*/”结束,注释的内容放在它们之间。
例如,在Hello World程序中使用块注释将输出Hello World字符串和定位控制台窗体的C#语句注释为无效代码。代码如下。
static void Main(string[] args) //主入口方法
{
/* 块注释开始
Console.Write Line("Hello World"); //输出“Hello World”字符串
Console.Read Line();
*/
}