第7章 C#语言基础.doc
《第7章 C#语言基础.doc》由会员分享,可在线阅读,更多相关《第7章 C#语言基础.doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 C#语言基础本章概述C#是随.NET技术一起发布的新一代编程语言,兼备了C+与Java的许多优点,易学好用,功能强大。在Visual Studio .NET 2003中,微软推出了C#语言1.x版,随着后继推出的VS 2005和VS 2008,C#语言的版本也在不断更新,目前最新的VS版本为。使用ASP.NET开发Web应用程序,掌握C#语言是程序设计的关键。本章在C# 2005的基础上,介绍C#语言的数据类型、控制语句、类与对象等语言基础。学习目标:1了解C#语言特点及应用前景;2掌握VS.NET和ASP.NET编写C#程序的方法和步骤;3了解C#语法基础,包括数据类型、,变量、,流
2、程控制、,错误处理等;4理解类和对象的概念,能熟悉使用C#创建和使用类。7.1 在ASP.NET中创建C#程序C#是整个.NET Framework的基础语言,可以在Visual Studio环境多种开发模式下使用C#语言,如Windows应用程序、类库等,图7-1是在Visual Studio 2005新建项目时可供选择的模板。图7-1 C#语言工作模板很多教材都以“控制台应用程序”讲解C#语言,以命令窗口方式演示结果,程序文档简单,直观方便。考虑到Web开发实际情况,本教材结合ASP.NET环境讲述C#语言。新建一个Web项目的流程如下:单击“文件”菜单”,选择“新建网站”。如图7-2中选
3、择新建ASP.NET网站,并选择语言为C#,指定网站存放的文件路径。图7-2 新建网站新建网站后,默认会生成Default.aspx与Default.aspx.cs两个文件,即是网站的一个页面和对应的C#后台程序。默认情况下,ASP.NET网站项目中的页面文件与C#代码文件分离存放,在页面文件Default.aspx中通过指令“CodeFile=Default.aspx.cs”,实现页面文件与对应代码文件的关联。开发人员可通过资源管理器新建或管理页面文件。如图7-3所示,在Visual Studio集成开发环境下,所有基本的代码框架已经自动生成,开发人员只需要在相应的代码框架中编写对应的C#程
4、序。图7-3 Visual Studio 2005集成开发环境7.2 数据类型7.2.1数据类型概述在C#语言中,数据类型可以理解为内部数据类型与用户定义数据类型,根据数据存储形式也可分为值类型与引用类型。1内部类型与用户定义类型内部数据类型,如int(整型),char(字符型);用户定义类型,如用户定义的类或接口。2值类型与引用类型值类型,直接存放真正的数据,值类型都有固定的长度,值类型的变量都保存在堆栈(stack)上。作为值类型的变量,每个都有自己的数据,因此对一个变量的操作不会影响其它变量。简单类型、结构类型、枚举类型都属于C#值类型的范畴。如表7-1所示,简单类型包括整型、浮点型、布
5、尔型、字符型(char)、字符串型等基本的数据类型。表 7-1 C#简单数据类型表类型关键字说明取值范围对应.NET类整型byte无符号 8 为整数,0255System.Bytesbyte有符号8位整数-128127System.SByteshort有符号16位整数-215215-1,即-3276832767System.Int16ushort无符号16位整数0216-1,即065535System.UInt16int有符号32位整数-231231-1System.Int32uint无符号32位整数0232-1System.UInt32long有符号64位整数-263263-1System.
6、Int64ulong无符号64位整数0264-1System.UInt64布尔型bool8位true/falseSystem.Boolean字符型char16位Unicode 字符U+0000 to U+ffffSystem.Char浮点型float32位浮点值,7位小数1.51045 3.41038System.Singledouble64位浮点值,有15到16位的小数5.0103241.710308System.Doubledecimal有符号128位数据,有28到29位有效位1.01028 7.91028System.Decimal提示:更详细的C#数据类型与示例可访问微软MSN技术资源
7、库: 引用类型:学过C语言的读者都知道指针的概念,指针实质上是对变量存储的地址进行操作。C#引用类型存储数据的内存地址的引用,引用类型位于受管制的堆(Heap)上,作为引用类型的变量可以引用同一对象,因此对一个变量的操作会影响另一个变量所引用的同一对象。类类型、对象类型、接口类型、委托类型、数组等都属于C#引用数据类型的范畴。7.2.2数据类型转换不同类型的C#数据在混合运算时需要进行数据类型转换,数据之间的转换可通过显示(强制)或隐式(自动)方式进行。1隐式转换一般是低精度类型向高精度型转换,能够保证值不发生变化。 例如本章范例程序DataCast中,有下列代码:int a;float f;
8、a = 10;f = a;Response.Write(a= + a.ToString();Response.Write(f= + f.ToString();f = 12.5F;/a = f;/无法隐式地从高精度float类型向低精度int进行转换a = (int)f;Response.Write(a= + a.ToString();/在页面中输出变量值Response.Write(f= + f.ToString(); 整型变量i向浮点型 f进行转换,不会造成数据的丢失。C#不允许隐式地从高精度向低精度进行转换,去掉上例代码语句“/a=f;”注释,即直接将float变量f的值赋给int变量a,
9、编译器会报程序出错,并提示有语法错误,如图7-4与图7-5所示。图片上有鼠标图7-4 ASP.NET编译错误图7-5 ASP.NET开发环境错误列表图片上有鼠标2显示转换从上面隐式转换的例子我们发现,直接将高精度值赋给低精度变量,即隐式转换,在VS编译环境中不是不允许的,出现这种情况的赋值语句,程序将不能正常编译执行,这样做其实是为了保证数据转换时的正确性。但有时,程序员确实需要将高精度值赋给低精度变量,这时,需要使用显示转换。显示转换也称强制类型转换,不能保证数据的正确性。显式转换的格式为(强制类型)变量,如(int)(12.54)会将double型常量转换为int型。在本章示例DataCa
10、st例2中,演示了一个通过ASP.NET页面进行加法运算的功能,具体实现过程非常简单。首先从工具栏中向页面拖放三个文本框控件,其ID值为自动生成的“TextBox1”、“TextBox2”、“TextBox3”,再拖放一个按钮控件,双击按钮,即可进行加法计算的编程,读取文本框控件的值与给文本框控件赋值方法非常简单,使用文本框控件ID的Text属性即可实现,如“this.TextBox1.Text=”24.3”;”。this.TextBox3.Text = this.TextBox1.Text + this.TextBox2.Text;如果使用上述语句实现加法运算,读者会发现,执行页面时,在前两
11、个文本框中分别输入1和2,得到的结果并非3,而是12,如图7-6所示。图7-6 文本框字符运算图片上有鼠标这是因为文本控件的Text值为字符串类型,字符串类型的变量在执行“+”运算时,会进行字符串的拼接,因为上例中语句的功能实质上是将文本框1与文本框2的Text值进行字符串拼接,再赋给文本框3,从表面上看,读者会误认为是执行整数加法“1+2”,而实质上是执行字符串拼接1+2。要解决上述问题,必须使用显式数据转换,下面给出正确的代码。float a, b, sum;a = float.Parse(this.TextBox1.Text);b = float.Parse(this.TextBox2.
12、Text);sum = a + b;this.TextBox3.Text = sum.ToString();请读者注意,当文本框控件的文本向float变量进行类型转换时,如果转换语句写成(float) this.TextBox1.Text,是无法编译通过的。C#语言进行这样的约束是有原因的,如果用户在文本框中输入非数值的字符串如“abc”,再强制转换成float类型,肯定会引发异常。因此,我们采用.NET Framework中float类的Parse方法进行转换,事实上,所有字符串转换成其他数值类型都可以使用该方法,如int.Parse(23.2)。此外,还可以使用Convert函数进行转换,
13、 Parse方法只支持字符串类型到其他类型的转换,而Convert函数可以支持各种类型之间的转换,下列代码是Convert函数进行数据转换的例子。float a,b;double c, d;c = Convert.ToDouble(b);d = Convert.ToDouble(this.TextBox1.Text);读者可以将上述代码中变量a,b,sum定义成int类型,观察数据转换时数据丢失的现象。7.2.3装箱与拆箱装箱(boxing)与拆箱(unboxing)在C#语言的值类型与引用类型之间提供一种有效的转换机制,通过装箱,可以将值类型显式或隐式地转换成引用类型,拆箱是将封装在引用类型
14、的值拆解出来的过程。任何值类型、引用类型都可以和对象类型(object)之间进行转换。装箱与拆箱的原理如图7-7所示。图7-7 (a)装箱过程 (b)拆箱过程 在本章范例Boxing中,演示了装箱与拆箱的过程,下列代码实现了int型变量i装箱到object对象中,并使用了对象实例的GetType方法在页面中输出装箱对象的类型。int i=10;object obj = i;/隐式装箱/ object o = (int)i;/显示装箱Response.Write(装箱后类型: + obj.GetType().ToString();下列代码演示了对象的拆箱过程。int i = 10;int j;s
15、tring k;object obj = i;obj = 123;/j = obj;/无法将类型“object”隐式转换为“int”。j=(int)obj;/k = (string)obj;/编译可以通过,但会引发转换异常。Response.Write(j=+j.ToString();Response.Write(i=+i.ToString();/Response.Write(k= + k);装箱以通过显式或隐式的方式实现,但拆箱必须使用显式方式,读者可以调试上述代码的注释语句,体验实际情况。有一点需要特别说明,拆箱过程,编译器并不检验封装在object对象封装数据与被拆箱对象数据类型的一致性
16、,但如果两者类型不一致,程序执行过程中可能会引发转换异常,如图7-8所示。因此,开发人员在进行拆箱操作时应保证两者之间的数据类型匹配。图7-8 拆箱过程引发异常请读者思考如何保证拆箱语句k = (string)obj不引发程序异常。7.3 常量与变量7.3.1常量常量,顾名思义,就是在整个程序运行过程中值不能改变的量。C#中可以使用const关键字定义常量。const float Pai = 3.;/Pai=3.14;/无法编译通过常量必须在定义的同时赋初值,不允许在以后的程序段中改变常量值,如上述代码中重新给Pai赋值,程序将无法编译通过。C#程序中使用常量可以防止某些数据值被修改,并使整个
17、程序结构更加清楚。7.3.2变量变量,就是在整个程序运行过程中,值可以发生变化的量。C#中变量定义的语法如下:访问级别 变量类型 变量名如protected int age,定义一个受保护的整型变量,变量名为age。变量一定要赋了初值才能使用,直接使用未赋初值的变量的程序无法编译通过。在本章范例ConstVari中,实现一个计算圆面积的功能,用户在文本框中输入半径,点击计算按钮后输出圆的面积,程序代码如下, 程序执行结果如7-9所示。const float Pai = 3.F;float r=0, area;/ area = Pai * r * r;/编译无法通过,使用未赋值的变量r。r =
18、float.Parse(this.TextBox_R.Text);area = Pai * r * r;this.Label_result.Text += + area.ToString();图7-9 计算圆的面积7.3.3变量作用范围变量的作用范围是指一个变量在程序中的生命周期,全局变量在整个程序中都起作用,局部变量只在变量所在程序段中起作用。在本章范例ConstVaria中,定义了一个静态全局变量static int sum = 0,只要在这个页面程序的范围内,都可以访问或修改sum的值。public partial class ConstVaria : System.Web.UI.Pag
19、estatic int sum = 0;protected void Page_Load(object sender, EventArgs e) protected void Button3_Click(object sender, EventArgs e) 一般情况下,在程序段的最前段声明变量,C#允许在代码块定义变量,该变量只在本代码块中起作用。例如在下面代码中,变量a和b是在函数Button2_Click中定义的变量,在整个函数中都起作用,而变量i和t是在程序段中if(ab)中定义的,只在该程序段中起作用,在该程序段外的任何地方使用该变量,编译器都会提示“当前上下文不存在的名称”。而全局
20、变量sum,在页面程序ConstVaria.aspx.cs的所有范围内都可以使用,读者可以查看Page_Load 、Button2_Click、Button3_Click三个事件函数中对sum变量的使用情况。protected void Button2_Click(object sender, EventArgs e) int a=0, b=10; Response.Write(sum= + sum.ToString(); if(a= 4) bool t =true; Response.Write(t= + t.ToString(); sum+; / Response.Write(i= + i
21、.ToString();/无法使用程序段中的局部变量i; / Response.Write(t= + t.ToString();/无法使用程序段中的局部变量t; Response.Write(a= + a.ToString(); Response.Write(b= + b.ToString(); Response.Write(sum= + sum.ToString(); 7.3.4 静态变量使用static关键字可以将变量声明为静态变量,一般情况下,在变量的生命周期之外,变量资源会被收回,再次调用变量所在的代码段时,系统重新生成变量资源,并赋给初始值,但使用static关键字之后,下次调用变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 C#语言基础 C# 语言 基础
限制150内