【Java开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Java开源代码-第2章 C# 3 0程序设计基础 - 计算机教材的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
第2章C3.0程序设计基础在第一章里了解了ASP.NET3.5的特性和一些基本的.NETFramework知识不过如果要深入到ASP.NET3.5应用程序开发需要对开发语言有更加深入的了解。
而在.NET平台上微软主推的编程语言就是C本章将会从C的语法、结构和特性来讲解以便读者能够深入的了解C程序
设计。
2.1C程序C程序有自己的程序结构。
C编程语言类似C/
Java等面向对象编程语言同样需要编写类、创建对象等。
但是C依旧有与其他面向对象编程语言不同的特性使用这些特性能够快速的正确的编写C宿主语言的应用程序如ASP.NET、WinForm等。
2.1.1C程序的结构在开始学习和编写C
代码之前首先应该了解C编程语言的结构下列
代码说明了C应用程序的基本结构。
usingSystemusingSystem.Collections.GenericusingSystem.LinqusingSystem.Text//使用命名空间namespacemycsharp//程序
代码命名空间classProgram//应用程序主类staticvoidMainstringargs//入口方法Console.WriteLinequotHelloWorldquot//输出HelloWorldConsole.ReadKey//等待用户输入其中using关键字的用途是引用微软的.NET框架中现有的类库资源该关键字出现在应用程序
代码的开头并使用在cs为后缀的文件中使用。
using关键字通常情况下会出现几次其目的是引用类库中的各种资源这些资源不仅包括
代码中的SystemSystem.Collections.GenericLinq还包括其他.NET框架的资源。
System命名空间提供了构建应用程序所需的各种系统功能例如LINQ的类库包括了构建LINQ应用程序的各种类库资源。
.NET中提供大量的命名空间以便开发人员能够使用现有的类库进行应用程序的开发。
同时在
代码中也可以看到在其中包含一个mycsharp的一个命名空间示例
代码如namespacemycsharp。
在当前程序中声明该命名空间可以在其他的程序中引用这个命名空间并使用此命名空间下的类和方法。
21另外Program是一个类名。
在C或其他的任何面向对象语言中如
JAVA、C都需要编写类类用于创建对象。
在上述
代码中Program是一个类的名称。
方法是用于描述类的行为。
在上述示例第9行中staticvoidMain是一个全局静态方法它指示编译器从此处开始执行程序相当于程序的入口程序运行的时候会执行Main方法作为入口。
在CWindows编程中大部分的应用程序必须在其组成程序的其中一个类中包含Main方法。
语句就是在C应用程序中包含的指令通过使用分号进行分割编译器通过分号来区分它们。
一些编程语言只允许一行放置一条语句但是C允许放置多个语句也可以将一个语句拆分成多行。
虽然C编译器支持这样的特性但是还是推荐使用一行放置一个语句的这样不仅提高了可读性也便于书写。
括号“”和“”用来标识程序中
代码的范围如上述
代码中Main方法囊括了Main方法的语句Program类囊括了类的方法而namespacemycsharp命名空间囊括了此命名空间里的所有类。
值得注意的是VisualStudio2008为开发人员在编写程序的时候提供了诸多的智能提示在完成一个类或一个变量时系统会自动补全而当鼠标放到一个大括号上的时候编译器会指示开发人员此括号的范围如图2-1所示。
图2-1外围元素被标记注意在一个类内的所有方法都是独立的方法所以每个大括号后面都不需要分号同样对于命名空间里的所有类也是一样。
2.1.2CIDE的
代码设置
代码格式也是
程序设计中一个非常重要的组成环节他可以帮助用户组织
代码和改进
代码也让
代码具有可读性。
具有良好可读性的
代码能够让更多的开发人员更加轻松的了解和认知
代码。
按照约定的格式书写
代码是一个非常良好的习惯下面的
代码示例说明了应用缩进、大小写敏感、空白区和注释等格式的原则。
usingSystemusingSystem.Collections.GenericusingSystem.Linq//使用LINQ命名空间usingSystem.Textnamespacemycsharp//声明命名空间classProgram//主程序类22staticvoidMainstringargs//静态方法Console.WriteLinequotHelloWorldquot//这里输出HelloWorldConsole.WriteLinequot按任意键退出..quotConsole.ReadKey//这里让用户按键后退出保持等待状态1111缩进缩进可以帮助开发人员阅读
代码同样能够给开发人员带来层次感。
读者可以从以上
代码看出这一串
代码让人能够很好的分辨区域非常方便的就能找到Main方法的
代码区域这是因为括号都是有层次的。
缩进让
代码保持优雅同一语句块中的语句应该缩进到同一层次这是一个非常重要的约定因为它直接影响到
代码的可读性。
虽然缩进不是必须的同样也没有编译器强制但是为了在不同人员的开发中能够进行良好的协调这是一个值得去遵守的约定。
2222大小写敏感C是一种对大小写敏感的编程语言。
可能php等其他语言的开发人员不太适应大小写敏感但是在C中其语法规则的确是对字符串中字母的大小写敏感的例如“CSharp”、“cSharp”、“csHaRp”都是不同的字符串在编程中应当注意。
3333空白C编译器会忽略到空白。
使用空白能够改善
代码的格式提高
代码的可读性。
但是值得注意的是编译器不对引号内的任何空白做忽略在引号内的空格作为字符串存在。
4444注释在C/C里编译器支持开发人员编写注释以便开发人员能够方便的阅读
代码。
当然在C里也一样继承了这个良好的习惯。
之所以这里说的是习惯是因为编写注释同缩进一样没有人强迫要编写注释但是良好的注释习惯能够让
代码更加优雅和可读谁也不希望自己的
代码在某一天过后自己也不认识了。
注释的写法是以符号“/”开始并以符号“/”结束这样能够让开发人员更加轻松的了解
代码的作用同时也可以使用符号“//”双斜线来写注释但是这样的注释是单行的示例
代码如下所示。
/多行注释本例
演示了在程序中写注释的方法在注释内也可以不要开头的号///单行注释一般对单个语句进行注释5555布局风格classProgramstaticvoidMainstringargsConsole.WriteLinequotHelloWorldquot//这里输出HelloWorldConsole.WriteLinequot按任意键退出..quotConsole.ReadKey//这里让用户按键后退出保持等待状态23从以上
代码可以看出程序中使用了缩进、大小写敏感空白区和注释等但是这个
代码风格依旧不是最好可以修改
代码让
代码更加“好看”。
这里能够将
代码进行修正修正后的示例
代码如下所示。
classProgramstaticvoidMainstringargsConsole.WriteLinequotHelloWorldquot//这里输出HelloWorldConsole.WriteLinequot按任意键退出..quotConsole.ReadKey//这里让用户按键后退出保持等待状态这种布局风格让开发人员感觉到耳目一新这样更能方便更多的开发人员阅读源
代码。
如果打开一千行或更多
代码量的源文件时其编码格式都是标准的风格的话不管是谁再接手去阅读都能尽快上手。
不仅如此在
软件开发当中应该规定好每个人都使用同样的布局风格让团队能够协调运作。
2.2变量在任何编程语言中无论是传统的面向过程还是面向对象都必须使用变量。
因此变量都有自己的数据类型在使用变量的时候必须使用相同的数据类型进行运算。
在程序的运行中计算中临时存储的数据都必须用到变量变量的值也会放置在内存当中由
计算机运算后再保存到变量中由此可见变量在任何的应用程序开发中都是非常基础也是非常重要的。
同样在C中也需要变量对数据进行存储本节将会介绍C的基本语法、数据类型、变量、枚举等。
2.2.1定义要声明一个变量就需要为这个变量找到一个数据类型在C中数据类型由.
NETFramework和C语言来决定表2-1列举了一些预定义的数据类型。
表2-1预定义数据类型一个简单的声明变量的
代码如下所示预定义类型定义字节数byte0255之间的整数1sbyte-128127之间的整数1short-3276832767之间的整数2ushort065535之间的整数2int-21474836482147483647之间的整数4uint04294967259之间的整数4long-92233720368547758089223372036854775807之间的整数8ulong0709551615之间的整数8bool布尔值trueoffalse1float单精度浮点值4double双精度浮点值8decimal精确的十进制值有28个有效单位12object其他所有类型的基类N/Achar065535之间的单个Unicode字符2string任意长度的Unicode字符序列N/A24ints//声明整型变量floatmyfloat//声明浮点型变量上述
代码声明了一个整型的变量s同时也声明了一个单精度浮点型变量myfloat。
2.2.2值类型这种类型的对象总是直接通过其值使用不需要对它进行引用。
基于值类型的变量直接包含值。
并且所有的C局部变量都需要初始化后才可以使用值类型同样如此初始化
代码如下所示。
ints//声明整型变量snewint//声明整型变量s3//初始化变量上式等同于如下
代码。
ints//声明整型变量s3//初始化变量所有的值类型均隐式的派生自System.ValueType并且值类型不能派生出新的类。
值的类型不能为null但是可空类型允许将null值赋给值类型在上面的
代码中程序通过默认的构造函数给为变量s初始化并赋值。
2.2.3引用类型引用类型的变量又称为对象是可存储对实际数据的引用。
常见的引用类型有class、interface、delegate、object和string。
多个引用变量可以附加于一个对象而且某些引用可以不附加于任何对象如果声明了一个引用类型的变量却不给他赋给任何对象那么它的默认值就是null。
相比之下值类型的值不能为null。
2.3变量规则声明变量并不是随意声明的变量的声明有自己的规则。
在C中应用程序包含许多关键字包括int等是不能够声明为变量名的如intint是不允许的在进行变量的声明和定义时需要注意变量名称是否与现有的关键字重名。
2.3.1命名规则和命名习惯命名规则就是给变量取名的一种规则一般来说命名规则就是为了让开发人员给变量或者命名空间取个好名不仅要好记还要说明一些特性。
在C里面有常用的一些命名的习惯如下。
Pascal大小写形式所有单词的第一个字母大写其他字母小写。
Camel大小写形式除了第一个单词所有单词的第一个字母大写其他字母小写。
当然在其他编程中不同的开发人员可能遇到了一些不一样的命名规则和命名习惯但是在C中推荐使用常用的一些命名习惯这样能保证
代码的优雅性和可读性。
同时也应该避免使用相同名称的命名空间或与系统命名相同的变量如以下
代码所示stringint//
系统会提示出错运行上述
代码时系统会提示错误因为字符串“int”是一个关键字当使用关键字做变量名时编25译器会混淆该变量是变量还是关键字所以系统会提示错误。
所以在变量声明时应该避免变量名称与关键字重名如果变量名称与关键字重名编译器就会报错C中常用的关键字如表2-2所示表2-2不应使用的关键字名称注意标识符、参数名、函数名都不需要使用缩写。
如果要使用缩写超过两个字符以上的缩写都应该使用Camel大写格式。
2.3.2声明并初始化变量在程序
代码编写中需要大量的使用变量和读取变量的值所以需要声明一个变量来表示一个值。
这个变量可能描述是一个人的年龄也可能是一辆车的颜色。
在声明了一个变量之后就必须给这个变量一个值只有在给变量值之后能够说明这个变量被初始化。
1111语法声明变量的语法非常简单即在数据类型之后编写变量名如一个人的年龄age和一辆车的颜色color声明
代码如下所示。
intage//声明一个叫age的整型变量代表年龄stringcolor//声明一个叫color的字符串变量代表颜色上述
代码声明了一个整型变量age和一个字符串型变量color由于年龄的值不会小于0也不会大于100所以在声明时可以使用数字类型进行声明。
2222初始化变量变量在声明后还需要初始化例如“我年龄21岁很年轻我想买一辆红色的车”那么就需要对相应的变量进行初始化示例
代码如下所示。
intage//声明一个叫age的整型变量代表年龄stringcolor//声明一个叫color的字符串变量代表颜色AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoBitAndBitNotBitOrBitXorBooleanByRefByteByValCallCaseCatchCBoolCByteCCharCDateCDecCDblCharCIntClassCLngCObjConstCShortCSngCStrCTypeDateDecimalDeclareDefaultDelegateDimDoDoubleEachElseElseIfEndEnumEraseErrorEventExitExternalSourceFalseFinallyForFriendFunctionGetGetTypeGotoHandlesIfImplementsImportsInInheritsIntegerInterfaceIsLetLibLikeLongLoopMeModModuleMustInheritMustOverrideMyClassNamespaceMyBaseNewNextNotNothingNotInheritableNotOverridableObjectOnOptionOptionalOrOverloadsOverridableOverridesParamArrayPreservePrivatePropertyProtectedPublicRaiseEventReadOnlyReDimRegionREMRemoveHandlerResumeReturnSelectSetShadowsSharedShortSingleStaticStepStopStringStructureSubSyncLockThenThrowToTrueTryTypeOfUnicodeUntilVariantWhenWhileWithWithEventsWriteOnlyXorevalextendsinstanceofpackagevar26age21//声明始化年龄21岁colorquotredquot//声明始化车的颜色为红色上述
代码也可以合并为一个步骤简化编程开发示例
代码如下所示。
intage1//声明并初始化一个叫age的整型变量代表年龄stringcolorquotredquot//声明初始化3333赋值在声明了一个变量之后就可以给这个变量赋值了但是当编写以下
代码就会出错示例
代码如下。
floata1.1//错误的声明浮点类型变量当运行了以上
代码后会提示错误信息不能隐式地将Double类型转换为“float”类型请使用“F”后缀创建此类型。
从错误中可以看出将变量后缀增加一个“F”即可示例
代码如下所示。
floata1.1F//正确的声明浮点类型变量运行程序程序就能够编译并运行了。
这是因为若无其他指定C编译器将默认所有带小数点的数字都是Double类型如果要声明成其他类型可以通过后缀来指定数据类型如表2-3将展示一些可用的后缀并且后缀可用小写。
表2-3可用的后缀表4444转义字符在开发过程当中如果需要将单引号或者双引号输出或将单引号等字符作为字符串输出就会发现在字符串中单引号或者双引号等字符是不能直接进行输出呈现。
为了解决这一问题于是引入了转义字符常用的转义字符表如表2-4所示。
表2-4转义字符表若在应用程序开发过程中需要在程序里的字符串中编写一个双引号并进行输出可以使用转义字符进行输出示例
代码如下所示。
stringstr”thisis””//使用转义字符6666设置断点后缀描述U无符号L长整型UL无符号长整型F浮点型D双精度浮点型M十进制L长整型换码序列字符名称’单引号”双引号反斜杠0空字符a警报符b退格f换页n换行r回车t水平制表符v垂直制表符27在VisualStudio.NET开发环境中为用户提供了在开发应用程序时查看变量值的工具只需要在查看的变量上设置断点以调试模式运行应用程序就可以在调试窗口中查看变量的值。
在
代码编辑窗口单机左边的空白处可直接设置断点。
断点以红色圆点标识。
也可以在调试菜单中单击【切换断点】按钮或使用快捷键【F9】键来设置断点如图2-2所示。
图2-2设置断点按下【F5】键或在菜单栏中的调试菜单中单击【启动调试】按钮都可以运行程序。
当程序开始运行程序从Main入口运行并直至遇到断点遇到断点后程序将停止运行如图2-3所示。
同时开发环境会高亮显示下一条即将执行的
代码同时调试查看窗口会显示并呈现变量的当前值如图2-4所示。
图2-3运行到断点提示下一步执行的
代码图2-4显示当前值在调试完成后可以通过快捷键【ShiftF5】停止调试也可以在菜单栏中的【调试】菜单里的【停止调试】选项中停止应用程序的调试。
如果需要继续执行可以按下【F5】键或在调试菜单中选择【继续执行到下一个断点】选项进行执行。
开发人员还可以通过使用快捷键【F10】或在调试菜单中选择【逐过程】或【逐语句】每次只执行一条语句方便对
代码中变量变化的查看。
2.3.3数组数组是一个引用类型开发人员能够声明数组并初始化数据进行相应的数组操作数组是一种
常用的数据存放方式。
1111数组的声明数组的声明方法是在数据类型和变量名之间插入一组方括号声明格式如下所示。
stringgroups//声明数组以上语句声明了一个变量名为groups的数组其数据类型为string。
声明了一个数组之后并没有为此数组添加内容初始化需要对数组初始化才能使用数组。
2222数组的初始化28开发人员可以对数组进行显式的初始化以便能够填充数组中的数据初始化
代码如下所示。
stringgroupsquotasp.netquotquotcquotquotcontrolquotquotmvcquotquotwcfquotquotwpfquotquotlinqquot//初始化数组值得注意的是与平常的逻辑不同的是数组的开始并不是1而是0。
以上初始化了groups数组所以groups0的值应该是“asp.net”而不是“c”相比之下group1的值才应该是“c”。
3333.NET.NET.NET.NET中数组的常用的属性和方法在.NET中.NET框架为开发人员提供了方便的方法来对数组进行运算专注于逻辑处理的开发人员不需要手动实现对数组的操作。
这些常用的方法如下所示。
Length方法用来获取数组中元素的个数。
Reverse方法用来反转数组中的元素可以针对整个数组或数组的一部分进行操作。
Clone方法用来复制一个数组。
对于数组的操作可以使用相应的方法进行数据的遍历、
查询和反转示例
代码如下所示。
usingSystemusingSystem.Collections.GenericusingSystem.LinqusingSystem.Text//声明文本命名空间namespacemyArray//主应用程序类classProgramstaticvoidMainstringargsstringgroupsquotasp.netquotquotcquotquotcontrolquotquotmvcquotquotwcfquotquotwpfquotquotlinqquot//初始化一个数组intcountgroups.Length//获取数组的长度Console.WriteLinequot------------------------数组长度--------------------------quotConsole.WriteLinecount.ToString//输出数组的长度Console.WriteLinequot-----------------------原数组元素值--------------------------quotforinti0iltcounti//遍历输出数组元素Console.WriteLinegroupsi//输出数组中的元素按F5运行后运行结果如图2-5所示。
图2-5数组运行结果29从上述结果中可以看出程序遍历了数组并将数组的内容全部输出。
在进行数组中的内容输出时需要使用循环语句进行输出数组的遍历和输出循环语句的用法会在后面讲解。
2.3.4声明并初始化字符串字符串是计算机应用程序开发中常用的变量在文本输出、字符串索引、字符串排序中都需要使用字符串。
1111声明及初始化字符串字符串类型string是程序开发中最常见的数据类型如上一小节声明的数组中的任意一个元素都是一个字符串。
由于数组也是有其数据类型的所以声明的数组是一个字符串型的数组。
字符串的声明方式和其他的数据类型声明方式相同字符串变量的值必须在“”双引号之间示例
代码如下所示。
stringstrquotHelloWorldquot//声明字符串在2.3.2中讲解了转义字符当开发人员试图在字符串中间输入一些特殊符号的时候会发现编译器报错示例
代码如下所示。
stringstrquotHelloquotWorldquot在VisualStudio2008中编写上述
代码会发现褐色的字符串被分开了并且编译器报错“常量中有换行符”因为字符串中的““”符号被当成是字符串的结束符号。
为了解决这个
问题就需要用到转义字符。
示例
代码如下所示。
stringstrquotHelloquotWorldquot//使用转义字符编译并运行运行结果如图2-6所示。
图2-6使用转义字符初始化字符串在程序中的开发中经常需要引用和打开某个文件打开文件的操作必须要引用文件夹的地址。
例如要打开我的
文档里的内容就必须在地址栏敲击D:UsersAdministratorDocuments在编写程序的时候“”字符却无法编写在字符串中同样也需要转义字符示例
代码如下所示。
stringstrquotD:UsersAdministratorDocumentsquot//使用转义字符编译并运行运行结果如图2-7所示。
图2-7使用转义字符初始化字符串2222使用逐字符串如果字符串初始化为逐字符串编译器会严格的按照原有的样式输出无论是转义字符中的换行符还是制表符都会按照原样输出。
逐字符串的声明只需要在双引号前加上字符“”即可示例
代码如下所示。
stringstrquot文件地址:D:UsersAdministratorDocumentstquot//逐字符串30编译并运行上述
代码运行结果如图2-8所示。
图2-8使用逐字符串但是对于双引号而言逐字符串依旧无法正确进行输出。
若要使用逐字符串进行双引号的输出则必须使用引号进行编写以便正确的输出双引号示例
代码如下所示。
stringstrquotquotquotquot//输出双引号编译并运行运行结果如图2-9所示。
图2-9逐字符串输出双.