ITjob .NET视频教程之C#教材-c#基础2_第1页
ITjob .NET视频教程之C#教材-c#基础2_第2页
ITjob .NET视频教程之C#教材-c#基础2_第3页
ITjob .NET视频教程之C#教材-c#基础2_第4页
ITjob .NET视频教程之C#教材-c#基础2_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章C#基础(二)简要描述将在这个介绍中讲述的一系列主题。首先,我们将了解一下这些年来计算本身是如何演变的。目标枚举数组命名空间预处理指令C#编程规范枚举类型枚举是用户定义的整数类型,它是一个值类型。在声明一个枚举时,要指定该枚举可以包含的一组可接受的实例值。不仅如此,还可以给值指定易于记忆的名称。using

System;usingSystem.Collections.Generic;using

System.Text;namespace

ConsoleApplication1{class

Program{public

enum

TimeOfDay{Morning,Afternoon,Evening}static

void

Main(string[]

args){Console.WriteLine("请输入一天的几个选项,其中0:Morning,1:Afternoon,2:Evening:");string

aa=Console.ReadLine();//将输入的数字转换为枚举类型

WriteGreeting((TimeOfDay)Convert.ToInt32(aa));}static

void

WriteGreeting(TimeOfDay

timeOfDay){switch

(timeOfDay){case

TimeOfDay.Morning:Console.WriteLine("Good

morning!");Console.ReadLine();break;case

TimeOfDay.Afternoon:Console.WriteLine("Good

afternoon!");Console.ReadLine();break;枚举类型示例:定义一个枚举:public

enum

TimeOfDay{Morning,Afternoon,Evening}//我们可以将整数转换为枚举类型int

aa=1;Console.WriteLine((TimeOfDay)aa);//也可以实现枚举类型转换为整数TimeOfDay

bb=TimeOfDay.Evening;Console.WriteLine((int)bb);备注中的代码演示了一个整数类型与枚举类型转换的例子case

TimeOfDay.Evening:枚举类型如果需要将一个字符串转换为枚举值,我们将enum类的

parse方法:TimeOfDay

time2

=

(TimeOfDay)Enum.Parse(typeof(TimeOfDay),

"afternoon",

true);使用枚举类型的优势:枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。枚举使代码更易于键入。数组int表示一个整数,而int[]表示一个整型数组用new关键字初始化特定大小的数组,方括号中给出大小:int[]

integers

=

new

int[32];所有的数组都是引用类型如:int[]copy=integers;该代码也只是把变量copy指向同一个数组,而不是创建一个新数组。数组(4)数组从0开始,所以要用下标0引用第一个变量:integers[0]

=

35;同样,用下标值31引用有32个元素的数组中的最后一个元素:integers[31]=432;(5)可以在声明数组时不进行初始化,动态地指定其大小。如:int[]integers;integers=new

int[32];可以使用下面的语法查看一个数组包含多少个元素:int

numElements

=

integers.Length;数组注意:C#数组从零开始建立索引,即数组索引从零开始。方括号[]必须紧跟在类型后面,而不是标识符后面。声明数组

C#支持一维数组、多维数组(矩形数组)等。□声明不同类型的数组:一维数组:int[]numbers;多维数组:string[,]names;实例化数组□实例化不同类型的数组:一维数组:int[]numbers=new

int[5];多维数组:string[,]

names

=

new

string[5,4];初始数组一维数组int[]

numbers

=

new

int[5]

{1,

2,

3,

4,

5};string[]names=new

string[3]{"Matt","Joanne","Robert"};可省略数组的大小,如下所示:int[]

numbers

=

new

int[]

{1,

2,

3,

4,

5};string[]names=new

string[]{"Matt","Joanne","Robert"};如果提供了初始值设定项,则还可以省略new

运算符,如下所示:

int[]numbers={1,2,3,4,5};string[]

names

=

{"Matt",

"Joanne",

"Robert"};多维数组int[,]

numbers

=

new

int[3,

2]

{

{1,

2},

{3,

4},

{5,

6}

};string[,]siblings=new

string[2,2]{{"Mike","Amy"},{"Mary","Alber可省略数组的大小,如下所示:int[,]

numbers

=

new

int[,]

{

{1,

2},

{3,

4},

{5,

6}

};string[,]siblings=new

string[,]{{"Mike","Amy"},{"Mary","Albert"如果提供了初始值设定项,则还可以省略new

运算符,如下所示:int[,]

numbers

=

{

{1,

2},

{3,

4},

{5,

6}

};string[,]

siblings

=

{

{"Mike",

"Amy"},

{"Mary",

"Albert"}

};访问数组成员通过索引访问一维数组int[]

numbers

=

{10,

9,

8,

7,

6,

5,

4,

3,

2,

1,

0};numbers[4]

=

5;通过foreach访问int[]

numbers

=

{4,

5,

6,

1,

2,

3,

-2,

-1,

0};foreach

(int

i

in

numbers){System.Console.WriteLine(i);}由于有了多维数组,可以使用相同方法来循环访问元素,例如:

int[,]

numbers=new

int[3,

2]

{{9,

99},

{3,

33},

{5,

55}};foreach(int

i

in

numbers){Console.Write("{0}

",

i);}命名空间命名空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,命名空间是一种逻辑组合,而不是物理组合。所有定义的类都包括在命名空间中。命名空间例如:namespaceCustomerPhoneBookApp{using

System;public

struct

Subscriber{//

Code

for

struct

here...}}命名空间命名空间还可以嵌套:namespaceFirstNameSpace{namespace

SecondNameSpace{namespaceThirdNameSpace{class

NamespaceExample{//

Code

for

the

class

here...}}}}引用的方式为:FirstNameSpace.SecondNameSpace.ThirdNameSpace.

NamespaceExample命名空间用using语句指定命名空间位置如:using

System;using

FirstNameSpace;用绝对路径引用命名空间可以防止类重复。例如,类NamespaceExample同时存在于FirstNameSpace和SecondNameSpace命名空间中,那么就需要制定全名:using

FirstNameSpace;class

Test{public

static

void

Main(){FristNameSpace.NamespaceExample

nSEx

=

newFristNameSpace.NamespaceExample();//do

something

with

the

nSEx

variable

}}命名空间例如,我们定义两个命名空间,如下:namespace

namespace1{public

class

aa{}}namespace

namespace2{public

class

aa{}}命名空间这样引用会报错的:using

namespace1;using

namespace2;aa

newaa=new

aa();必须这样引用:Namespace1.aa=new

Namespace1.aa();或者Namespace2.aa=

new

Namespace2.aa();再看Main()方法多个Main()方法是不允许的,因为这个类方法是程序的入口。可以给Main()方法传送参数前面的例子只介绍了不带参数的Main()方法。我们可以通过两种方式给Main()传递参数再看Main()方法(1)在调试环境下:再看Main()方法(2)命令行输出:如:在bin/debug目录下运行ConsoleApplication1.exe

a

b

c再看Main()方法要从控制台窗口中读取一行文本,可以使用Console.ReadLine()方法Console.Write()方法将指定的值写入控制台窗口。Console.WriteLine()方法类似,但在输出结果的最后添加一个换行符。控制台输出格式举例:

int

i=10;int

j=20;Console.WriteLine("{0}

plus

{1}

equals

{2}",

i,

jj);Console.ReadLine();第一个参数是花括号中包含标记的字符串,在这个花括号中,要把后续的参数插入到文本中。每个标记都包含一个基于0的索引,表示列表中参数的序号。控制台输出格式举例:int

i

=

940;int

j

=

73;Console.WriteLine("

{0,4}\n+{1,4}\n––––\n

{j,

i

+

j);Console.ReadLine();可以为值指定宽度,调整文本在该宽度中的位置,正值表示右对齐,负值表示左对齐。为此可以使用格式{n,w},其中n是参数索引,w是宽度值。控制台输出格式举例:decimal

i

=

940.23m;decimal

j

=

73.7m;Console.WriteLine("

{0,9:C2}\n+{1,9:C2}\n

––––––\n

{2,9:C2}"j);还可以格式字符串,应把它放在给出参数个数和字段宽度的标记后面,并用一个冒号把它们分隔开。这里是精度为两位小数,则使用C2。控制台输出格式举例:double

d

=

0.234;Console.WriteLine("{0:#.00}",

d);如果在符号(#)的位置上没有字符,就会忽略该符号(#),如果0的位置上有一个字符,就用这个字符代替0,否则就显示0。控制台输出格式字

串C说

明本地货币格式DEF十进制格式,把整数转换为以10为基数的数,如果给定一个精度说明符,就加上前导0科学计数法(指数)格式。精度说明符设置小数位数(默认为6)。格式字符串的大小写("e"或"E")确定指数符号的大小写固定点格式,精度说明符设置小数位数,可以为0G普通格式,使用E或F格式取决于哪种格式较简单N数字格式,用逗号表示千分符,例如32,767.44P百分数格式X16进制格式,精度说明符用于加上前导0什么是C#预处理器指令C#还有许多名为“预处理器指令”的命令。这些命令从来不会转化为可执行代码中的命令,但会影响编译过程的各个方面。预处理器指令的开头都有符号#。为什么要使用C#预处理器指令?我们想在调试的时候做一些调试输出断点,但是项目比较大,代码比较多,我在正式运行的时候要一行一行删除,太麻烦了,有没有简便的方法。答复:可以,用#define和#undef与#if,#eli#else和#endif来实现吧。注意:#define定义一个符号,#undef删除前面定义的符号。#define、#undef命令放在c#源码的开头,放在声明要编译的任何对象的代码之前。为什么要使用C#预处理器指令?程序举例:我们做一个加法运算,在用户输入两个值后,将结果输出。static

string

maths(int

a,

int

b){return

Convert.ToString(a+b);}为什么要使用C#预处理器指令?程序举例:中间的代码如下:

int

a,b;Console.WriteLine("请输入你的第一个值:")a=Convert.ToInt32(Console.ReadLine());Console.WriteLine("请输入你的第二个值:");b=Convert.ToInt32(Console.ReadLine());Console.WriteLine("这是我们正常的输出结果,值是"+maths(a,b));Console.ReadLine();为什么要使用C#预处理器指令?程序举例:现在我们在开始的地方加入:#define

DEBUG中间加入:#if

DEBUGConsole.WriteLine("但是我们在这里想看看刚刚我输入的值,原来是"+a);#endif为什么要使用C#预处理器指令?程序举例:或许我们会加入很多调试语句,但是当我不想调试了,我就用#undef作废它,同样的,#undef

DEBUG也要放在程序行的最上面。为什么要使用C#预处理器指令?我做了一个方法,别人拿去用了,但是我想提醒他,这个方法是有限制的。我可以用#warning“要注意这个方法是很久之前写的了,现在我又写了新的方法替代它了,在另外一个文件夹里"当然我们如果想废除此方法,但是还保留代码,我们可以使用:#error会影响编译器,一般会在编译器中自动报出错误,然后立即退出编译。为什么要使用C#预处理器指令?有的时候代码真的很多啊,我们用什么方法?

用#region和#endregion来将它们隐藏起来。这个是大家使用最多,常用来代码分块,在一个很长的cs文件中,这样做可以使代码更清晰。例如:#region一个加法方法static

string

maths(int

a,

int

b){return

Convert.ToString(a+b);}#endregion为什么要使用C#预处理器指令?我们出错时,编辑器往往提醒我们出错的行号,但是我们可以改变这个行号!用#line指令如果我们想恢复就用#line

default好像这个指令用处不是很大,至少我还没有知道在哪个地方使用它比较合适。为什么要使用C#预处理器指令?有些错误,我们根本不想让编辑器去报错,我们知道任何错误都有错误号的,只要我们知道这个错误号,我们就可以用#pragma

warning

disable

169去禁止它或许这个指令我们很久都不会用到,但是我想这个指令可能是有用的。插入的知识:关于XML注释///

<summary>///这是一个用于加法的方法,注意,只能用于整数运算///

</summary>///<param

name="a">这是第一个参数</param>///<param

name="b">这是第二个参数</param>///<returns>返回一个计算结果</returns>public

static

string

maths(int

a,int

b){return

Convert.ToString(a

+

b);}C#编程规则做为一名优秀的程序员,作为一名领导手下程序员的项目经理,c#编程规范就非常重要了,我们要在平时的练习中养成良好的编程习惯。用于标识符的规则标识符(值类型、引用类型)都要区分大小写它们必须以一个字母或下划线开头,但可以包含数字字符;不能把C#关键字用作标识符关键字abstractdoInprotectedtrueasdoubleIntpublictrybaseelseInterfacereadonlytypeofboolenumInternalrefuintbreakeventIsreturnulongbyteexplicitlocksbyteuncheckedcaseexternlongsealedunsafecatchfalsenamespaceshortushortcharfinallynewsizeofusingcheckedfixednullstackallocvirtualclassfloatobjectstaticvolatileconstforoperatorstringvoidcontinueforeachoutstructwhiledecimalgotooverrideswitchdefaultifparamsthisdelegateImplicitprivatethrow用于标识符的规则标识符也可以包含Unicode字符,用语法\uXXXX来指定,其中XXXX是Unicode字符的四位16进制代码。例如:Nameüberflu?_Identifier\u005fIdentifier最后两个标识符是相同的,可以互换(005f是下划线字符的Unicode代码)标识符\u不是转义符,而是Unicode字符的专用表示。标识符中最好不要用下划线字符,当然这不会报错的,但是它不符合c#的习惯。用法约定

Hungarian表示法(匈牙利命名法),比如:以前临时变量就用前缀L,全局变量就用G,但是

在c#中不用了,因为变量超过作用域范围就会出错。

要求命名能达意,比如:Height,最好不要用

integerValue之类的。

字段等引用的用camel表示法:即第一个单词的第一个字母小写,比

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论