【asp源码栏目提醒】:本文主要为网学会员提供“ASP NET开发大全第2章 C__3 0程序设计基础 - 编程语言”,希望对需要ASP NET开发大全第2章 C__3 0程序设计基础 - 编程语言网友有所帮助,学习一下!
第2章 C 3.0程序设计基础 在第一章里了解了
ASP.NET 3.5的特性和一些基本的.NET Framework知识不过如果要深入到
ASP.NET 3.5应用程序开发需要对开发语言有更加深入的了解。
而在.NET平台上微软主推的编程语言就是C本章将会从C的语法、结构和特性来讲解以便读者能够深入的了解C程序设计。
2.1 C程序 C程序有自己的程序结构。
C编程语言类似C/Java等面向对象编程语言同样需要编写类、创建对象等。
但是C依旧有与其他面向对象编程语言不同的特性使用这些特性能够快速的正确的编写C宿主语言的应用程序如
ASP.NET、WinForm等。
2.1.1 C程序的结构 在开始学习和编写C代码之前首先应该了解C编程语言的结构下列代码说明了C应用程序的基本结构。
using System using System.Collections.Generic using System.Linq using System.Text //使用命名空间 namespace mycsharp //程序代码命名空间 class Program //应用程序主类 static void Mainstring args //入口方法 Console.WriteLinequotHello Worldquot //输出Hello World Console.ReadKey //等待用户输入 其中using关键字的用途是引用微软的.NET框架中现有的类库资源该关键字出现在应用程序代码的开头并使用在cs为后缀的文件中使用。
using关键字通常情况下会出现几次其目的是引用类库中的各种资源这些资源不仅包括代码中的SystemSystem.Collections.GenericLinq还包括其他.NET框架的资源。
System命名空间提供了构建应用程序所需的各种系统功能例如LINQ的类库包括了构建LINQ应用程序的各种类库资源。
.NET中提供大量的命名空间以便开发人员能够使用现有的类库进行应用程序的开发。
同时在代码中也可以看到在其中包含一个mycsharp的一个命名空间示例代码如namespace mycsharp。
在当前程序中声明该命名空间可以在其他的程序中引用这个命名空间并使用此命名空间下的类和方法。
21 另外Program是一个类名。
在C或其他的任何面向对象语言中如JAVA、C都需要编写类类用于创建对象。
在上述代码中Program是一个类的名称。
方法是用于描述类的行为。
在上述示例第9行中static void Main是一个全局静态方法它指示编译器从此处开始执行程序相当于程序的入口程序运行的时候会执行Main方法作为入口。
在C Windows编程中大部分的应用程序必须在其组成程序的其中一个类中包含Main方法。
语句就是在C应用程序中包含的指令通过使用分号进行分割编译器通过分号来区分它们。
一些编程语言只允许一行放置一条语句但是C允许放置多个语句也可以将一个语句拆分成多行。
虽然C编译器支持这样的特性但是还是推荐使用一行放置一个语句的这样不仅提高了可读性也便于书写。
括号“”和“”用来标识程序中代码的范围如上述代码中Main方法囊括了Main方法的语句Program类囊括了类的方法而namespace mycsharp命名空间囊括了此命名空间里的所有类。
值得注意的是Visual Studio 2008为开发人员在编写程序的时候提供了诸多的智能提示在完成一个类或一个变量时系统会自动补全而当鼠标放到一个大括号上的时候编译器会指示开发人员此括号的范围如图2-1所示。
图 2-1 外围元素被标记 注意在一个类内的所有方法都是独立的方法所以每个大括号后面都不需要分号同样对于命名空间里的所有类也是一样。
2.1.2 C IDE的代码设置 代码格式也是程序设计中一个非常重要的组成环节他可以帮助用户组织代码和改进代码也让代码具有可读性。
具有良好可读性的代码能够让更多的开发人员更加轻松的了解和认知代码。
按照约定的格式书写代码是一个非常良好的习惯下面的代码示例说明了应用缩进、大小写敏感、空白区和注释等格式的原则。
using System using System.Collections.Generic using System.Linq //使用LINQ命名空间 using System.Text namespace mycsharp //声明命名空间 class Program //主程序类 22 static void Mainstring args //静态方法 Console.WriteLinequotHello Worldquot //这里输出Hello World Console.WriteLinequot按任意键退出..quot Console.ReadKey //这里让用户按键后退出保持等待状态 1缩进 缩进可以帮助开发人员阅读代码同样能够给开发人员带来层次感。
读者可以从以上代码看出这一串代码让人能够很好的分辨区域非常方便的就能找到Main方法的代码区域这是因为括号都是有层次的。
缩进让代码保持优雅同一语句块中的语句应该缩进到同一层次这是一个非常重要的约定因为它直接影响到代码的可读性。
虽然缩进不是必须的同样也没有编译器强制但是为了在不同人员的开发中能够进行良好的协调这是一个值得去遵守的约定。
2大小写敏感 C是一种对大小写敏感的编程语言。
可能php等其他语言的开发人员不太适应大小写敏感但是在C中其语法规则的确是对字符串中字母的大小写敏感的例如“C Sharp”、“c Sharp”、“c sHaRp”都是不同的字符串在编程中应当注意。
3空白 C编译器会忽略到空白。
使用空白能够改善代码的格式提高代码的可读性。
但是值得注意的是编译器不对引号内的任何空白做忽略在引号内的空格作为字符串存在。
4注释 在C/C里编译器支持开发人员编写注释以便开发人员能够方便的阅读代码。
当然在C里也一样继承了这个良好的习惯。
之所以这里说的是习惯是因为编写注释同缩进一样没有人强迫要编写注释但是良好的注释习惯能够让代码更加优雅和可读谁也不希望自己的代码在某一天过后自己也不认识了。
注释的写法是以符号“/”开始并以符号“/”结束这样能够让开发人员更加轻松的了解代码的作用同时也可以使用符号“//”双斜线来写注释但是这样的注释是单行的示例代码如下所示。
/ 多行注释 本例演示了在程序中写注释的方法 在注释内也可以不要开头的号 / //单行注释一般对单个语句进行注释 5布局风格 class Program static void Mainstring args Console.WriteLinequotHello Worldquot //这里输出Hello World Console.WriteLinequot按任意键退出..quot Console.ReadKey //这里让用户按键后退出保持等待状态 23 从以上代码可以看出程序中使用了缩进、大小写敏感空白区和注释等但是这个代码风格依旧不是最好可以修改代码让代码更加“好看”。
这里能够将代码进行修正修正后的示例代码如下所示。
class Program static void Mainstring args Console.WriteLinequotHello Worldquot //这里输出Hello World Console.WriteLinequot按任意键退出..quot Console.ReadKey //这里让用户按键后退出保持等待状态 这种布局风格让开发人员感觉到耳目一新这样更能方便更多的开发人员阅读源代码。
如果打开一千行或更多代码量的源文件时其编码格式都是标准的风格的话不管是谁再接手去阅读都能尽快上手。
不仅如此在软件开发当中应该规定好每个人都使用同样的布局风格让团队能够协调运作。
2.2 变量 在任何编程语言中无论是传统的面向过程还是面向对象都必须使用变量。
因此变量都有自己的数据类型在使用变量的时候必须使用相同的数据类型进行运算。
在程序的运行中计算中临时存储的数据都必须用到变量变量的值也会放置在内存当中由计算机运算后再保存到变量中由此可见变量在任何的应用程序开发中都是非常基础也是非常重要的。
同样在C中也需要变量对数据进行存储本节将会介绍C的基本语法、数据类型、变量、枚举等。
2.2.1 定义 要声明一个变量就需要为这个变量找到一个数据类型在C中数据类型由.NET Framework和C语言来决定表2-1列举了一些预定义的数据类型。
表2-1 预定义数据类型 预定义类型 定义 字节数 byte 0255之间的整数 1 sbyte -128127之间的整数 1 short -3276832767之间的整数 2 ushort 065535之间的整数 2 int -21474836482147483647之间的整数 4 uint 04294967259之间的整数 4 long -92233720368547758089223372036854775807之间的整数 8 ulong 0709551615之间的整数 8 bool 布尔值true of false 1 float 单精度浮点值 4 double 双精度浮点值 8 decimal 精确的十进制值有28个有效单位 12 object 其他所有类型的基类 N/A char 065535之间的单个Unicode字符 2 string 任意长度的Unicode字符序列 N/A 一个简单的声明变量的代码如下所示 24 int s //声明整型变量 float myfloat //声明浮点型变量 上述代码声明了一个整型的变量s同时也声明了一个单精度浮点型变量myfloat。
2.2.2 值类型 这种类型的对象总是直接通过其值使用不需要对它进行引用。
基于值类型的变量直接包含值。
并且所有的C局部变量都需要初始化后才可以使用值类型同样如此初始化代码如下所示。
int s //声明整型变量 s new int //声明整型变量 s 3 //初始化变量 上式等同于如下代码。
int s //声明整型变量 s 3 //初始化变量 所有的值类型均隐式的派生自System.ValueType并且值类型不能派生出新的类。
值的类型不能为null但是可空类型允许将null值赋给值类型在上面的代码中程序通过默认的构造函数给为变量s初始化并赋值。
2.2.3 引用类型 引用类型的变量又称为对象是可存储对实际数据的引用。
常见的引用类型有class、interface、delegate、object和string。
多个引用变量可以附加于一个对象而且某些引用可以不附加于任何对象如果声明了一个引用类型的变量却不给他赋给任何对象那么它的默认值就是null。
相比之下值类型的值不能为null。
2.3 变量规则 声明变量并不是随意声明的变量的声明有自己的规则。
在C中应用程序包含许多关键字包括int等是不能够声明为变量名的如int int是不允许的在进行变量的声明和定义时需要注意变量名称是否与现有的关键字重名。
2.3.1 命名规则和命名习惯 命名规则就是给变量取名的一种规则一般来说命名规则就是为了让开发人员给变量或者命名空间取个好名不仅要好记还要说明一些特性。
在C里面有常用的一些命名的习惯如下。
Pascal大小写形式所有单词的第一个字母大写其他字母小写。
Camel大小写形式除了第一个单词所有单词的第一个字母大写其他字母小写。
当然在其他编程中不同的开发人员可能遇到了一些不一样的命名规则和命名习惯但是在C中推荐使用常用的一些命名习惯这样能保证代码的优雅性和可读性。
同时也应该避免使用相同名称的命名空间或与系统命名相同的变量如以下代码所示 string int //系统会提示出错 运行上述代码时系统会提示错误因为字符串“int”是一个关键字当使用关键字做变量名时编 25 译器会混淆该变量是变量还是关键字所以系统会提示错误。
所以在变量声明时应该避免变量名称与关键字重名如果变量名称与关键字重名编译器就会报错C中常用的关键字如表2-2所示 表2-2 不应使用的关键字名称 AddHandler AddressOf Alias And Ansi As Assembly Auto BitAnd BitNot BitOr BitXor Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date Decimal Declare Default Delegate Dim Do Double Each Else ElseIf End Enum Erase Error Event Exit ExternalSource False Finally For Friend Function Get GetType Goto Handles If Implements Imports In Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module MustInherit MustOverride MyClass Namespace MyBase New Next Not Nothing NotInheritable NotOverridable Object On Option Optional Or Overloads Overridable Overrides ParamArray Preserve Private Property Protected Public RaiseEvent ReadOnly ReDim Region REM RemoveHandler Resume Return Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until Variant When While With WithEvents WriteOnly Xor eval extends instanceof package var 注意标识符、参数名、函数名都不需要使用缩写。
如果要使用缩写超过两个字符以上的缩写都应该使用Camel大写格式。
2.3.2 声明并初始化变量 在程序代码编写中需要大量的使用变量和读取变量的值所以需要声明一个变量来表示一个值。
这个变量可能描述是一个人的年龄也可能是一辆车的颜色。
在声明了一个变量之后就必须给这个变量一个值只有在给变量值之后能够说明这个变量被初始化。
1语法 声明变量的语法非常简单即在数据类型之后编写变量名如一个人的年龄age和一辆车的颜色color声明代码如下所示。
int age //声明一个叫age的整型变量代表年龄 string color //声明一个叫color的字符串变量代表颜色 上述代码声明了一个整型变量age和一个字符串型变量color由于年龄的值不会小于0也不会大于100所以在声明时可以使用数字类型进行声明。
2初始化变量 变量在声明后还需要初始化例如“我年龄21岁很年轻我想买一辆红色的车”那么就需要对相应的变量进行初始化示例代码如下所示。
int age //声明一个叫age的整型变量代表年龄 string color //声明一个叫color的字符串变量代表颜色 26 age 21 //声明始化年龄21岁 color quotredquot //声明始化车的颜色为红色 上述代码也可以合并为一个步骤简化编程开发示例代码如下所示。
int age1 //声明并初始化一个叫age的整型变量代表年龄 string colorquotredquot //声明初始化 3赋值 在声明了一个变量之后就可以给这个变量赋值了但是当编写以下代码就会出错示例代码如下。
float a 1.1 //错误的声明浮点类型变量 当运行了以上代码后会提示错误信息不能隐式地将 Double 类型转换为“float”类型请使用“F”后缀创建此类型。
从错误中可以看出将变量后缀增加一个“F”即可示例代码如下所示。
float a 1.1F //正确的声明浮点类型变量 运行程序程序就能够编译并运行了。
这是因为若无其他指定C编译器将默认所有带小数点的数字都是Double类型如果要声明成其他类型可以通过后缀来指定数据类型如表2-3将展示一些可用的后缀并且后缀可用小写。
表2-3 可用的后缀表 后缀 描述 U 无符号 L 长整型 UL 无符号长整型 F 浮点型 D 双精度浮点型 M 十进制 L 长整型 4转义字符 在开发过程当中如果需要将单引号或者双引号输出或将单引号等字符作为字符串输出就会发现在字符串中单引号或者双引号等字符是不能直接进行输出呈现。
为了解决这一问题于是引入了转义字符常用的转义字符表如表2-4所示。
表2-4 转义字符表 换码序列 字符名称 ’ 单引号 ” 双引号 反斜杠 0 空字符 a 警报符 b 退格 f 换页 n 换行 r 回车 t 水平制表符 v 垂直制表符 若在应用程序开发过程中需要在程序里的字符串中编写一个双引号并进行输出可以使用转义字符进行输出示例代码如下所示。
string str”this is ” ” //使用转义字符 6设置断点 27 在Visual Studio .NET开发环境中为用户提供了在开发应用程序时查看变量值的工具只需要在查看的变量上设置断点以调试模式运行应用程序就可以在调试窗口中查看变量的值。
在代码编辑窗口单机左边的空白处可直接设置断点。
断点以红色圆点标识。
也可以在调试菜单中单击【切换断点】按钮或使用快捷键【F9】键来设置断点如图2-2所示。
图2-2 设置断点 按下【F5】键或在菜单栏中的调试菜单中单击【启动调试】按钮都可以运行程序。
当程序开始运行程序从Main入口运行并直至遇到断点遇到断点后程序将停止运行如图2-3所示。
同时开发环境会高亮显示下一条即将执行的代码同时调试查看窗口会显示并呈现变量的当前值如图2-4所示。
图2-3 运行到断点提示下一步执行的代码 图2-4 显示当前值 在调试完成后可以通过快捷键【ShiftF5】停止调试也可以在菜单栏中的【调试】菜单里的【停止调试】选项中停止应用程序的调试。
如果需要继续执行可以按下【F5】键或在调试菜单中选择【继续执行到下一个断点】选项进行执行。
开发人员还可以通过使用快捷键【F10】或在调试菜单中选择【逐过程】或【逐语句】每次只执行一条语句方便对代码中变量变化的查看。
2.3.3 数组 数组是一个引用类型开发人员能够声明数组并初始化数据进行相应的数组操作数组是一种常用的数据存放方式。
1数组的声明 数组的声明方法是在数据类型和变量名之间插入一组方括号声明格式如下所示。
string groups //声明数组 以上语句声明了一个变量名为groups的数组其数据类型为string。
声明了一个数组之后并没有为此数组添加内容初始化需要对数组初始化才能使用数组。
2数组的初始化 28 开发人员可以对数组进行显式的初始化以便能够填充数组中的数据初始化代码如下所示。
string groupsquotasp.netquotquotcquotquotcontrolquotquotmvcquotquotwcfquotquotwpfquotquotlinqquot //初始化数组 值得注意的是与平常的逻辑不同的是数组的开始并不是1而是0。
以上初始化了groups数组所以groups0的值应该是“
asp.net”而不是“c”相比之下group1的值才应该是“c”。
3.NET中数组的常用的属性和方法 在.NET中.NET框架为开发人员提供了方便的方法来对数组进行运算专注于逻辑处理的开发人员不需要手动实现对数组的操作。
这些常用的方法如下所示。
Length方法用来获取数组中元素的个数。
Reverse方法用来反转数组中的元素可以针对整个数组或数组的一部分进行操作。
Clone方法用来复制一个数组。
对于数组的操作可以使用相应的方法进行数据的遍历、查询和反转示例代码如下所示。
using System using System.Collections.Generic using System.Linq using System.Text //声明文本命名空间 namespace myArray //主应用程序类 class Program static void Mainstring args string groupsquotasp.netquotquotcquotquotcontrolquotquotmvcquotquotwcfquotquotwpfquotquotlinqquot //初始化一个数组 int count groups.Length //获取数组的长度 Console.WriteLinequot------------------------数组长度--------------------------quot Console.WriteLinecount.ToString //输出数组的长度 Console.WriteLinequot-----------------------原数组元素值--------------------------quot for int i 0 i lt count i //遍历输出数组元素 Console.WriteLinegroupsi //输出数组中的元素 按F5运行后运行结果如图2-5所示。
图2-5 数组运行结果 29 从上述结果中可以看出程序遍历了数组并将数组的内容全部输出。
在进行数组中的内容输出时需要使用循环语句进行输出数组的遍历和输出循环语句的用法会在后面讲解。
2.3.4 声明并初始化字符串 字符串是计算机应用程序开发中常用的变量在文本输.
上一篇:
PostSharp AOP编程:1 基于PostSharp的AOP日志记录和异常捕捉【附带源码】
下一篇:
还记得,那年的风车吗?