核心C#——C#高级编程第二章
2011-11-11 15:51
417 查看
注:本文主要给不熟悉C#的,或想加深C#基础知识的人阅读,如果是技术牛人,请绕行,以免耽误您的宝贵时间。
使用C#要先弄明白一下知识:声明变量、变量的初始化和作用域、C#的预定义数据类型、在C#程序中使用条件语句、循环语句和跳转语句指定执行流、枚举、名称空间、Main()方法、基本命令行C#编译器选项、使用System.Console执行控制台I/O、使用内部注释和文档编制功能、预处理器指令、C#编程的推荐规则和约定。C#的基础知识是后面使用C#开发程序的基础,阅读完本章后,读者就有足够的C#知识编写简单的程序了,但还不能使用继承等面向对象特征,这些内容将在以后介绍。
一、简单的C#程序
1.在文本编辑器中输入下面的代码,保存为后缀名为.cs的文件,如保存为:First.cs。
2.对源文件运行C#命令行编译器(csc.exe),编译这个程序:csc First.cs 此时就会在相应目录下生成First.exe文件,双击该文件即在编辑器中显示Hello World!
二、变量
1.在C#中声明变量使用下面的语法:datetype identifier,如int i;声明了int变量i,编译器不允许在表达式中使用这个变量,除非用一个值初始化这个变量。
2.声明i之后,就可以使用赋值运算符(=)给他赋值:i=10;还可以在一行代码中声明变量并且赋值:int i =20;
3.可以在一条语句中声明和初始化多个相同类型的变量:int i=1,j=2;
4.类型推断(type inference)使用var关键字,这时编译器可以根据变量的初始值推断变量的类型。如:var someNum=100;等价于int someNum=100;
变量一旦声明确定类型之后就不能改变类型了,就必须遵循其他变量类型遵循的强类型化规则。
5.变量的作用域是可以访问该变量的代码区域,一旦出去该区域,该变量就不可以在使用。
6.常量是其值在使用过程中不会发生变化的变量,在变量的前面加上关键字const,就可以把该变量指定为一个常量。const int a = 100;
常量必须在声明时初始化;
常量的值必须能在编译时用于计算,不能从一个变量中提取的值初始化常量;如果这样做请使用只读字段;
常量总是静态的,注意不可以用static修饰const常量。
三、预定义数据类型
1.值类型和引用类型:从概念上看,区别是值类型直接存储其值,应用类型存储对值的引用。
2.CTS类型:在C#声明一个int类型时,实际上是.Net结构的System.Int32的一个实例。
3.预定义值类型:内置的CTS值类型表示基本类型,如整形、浮点型、字符型和布尔类型。
如:sbyte-System.SByte,short-System.Int16,int-System.Int32,long-System.Int64,byte-System.Byte,ushort-System.UInt16,uint-System.UInt32,ulong-System.UInt64,float-System.Single,double-System.Double,decimal-System.Decimal,bool-System.Boolen,char-System.Char。
4.预定义的引用类型:
object-System.Object是所有类型的基类型,所有其他的类型都是从object直接或间接继承而来;
string-System.String。
四、流控制--控制流程语句
1.条件语句:if..else;switch..case语句;
2.循环语句:for循环;while循环;do..while循环;foreach循环;
3跳转语句:goto语句;break语句;continue语句;return语句;
五、枚举--用enum修饰
枚举是用户定义的整数类型,创建枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值,枚举使代码更清晰,允许用描述性的名称表示整数值。简单应用如下:
C#枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构,表示可以对它们调用方法,执行有用的任务。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。
可以从字符串中获取枚举值,请看下面一段代码:
这样就会返回1,Enum.Parse()方法实现从字符串中获取枚举值,并转化为整数。Enum.Parse()的第一个参数是要使用的枚举类型,第二个参数是要转换的字符串,第三个参数指定转换时是否忽略大小写。
六、名称空间
名称空间提供了一种组织相关类和其他类型的方式,与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。名称空间以句点(.)隔开,最后是类名。如:System.Date.DbHelp。命名空间通过Using语句引入。如:Using System.Date;
七、Main()方法
C#程序是从方法Main()开始执行的,这个方法必须是类或结构的静态方法,并且其返回值必须是int或void,Main()方法要么不带参数,要么是string类型的数组(string[] args)。我们给入口点方法指定什么级别并不重要,即使把该方法标记为private,它也可以运行。
八、控制台I/O
Console.Write();Console.WriteLine();注意可以添加一个格式字符串以及一个可选的精度值,主要格式字符串有C:本地货币格式,D:十进制格式,E:科学计数法(e的大小写确定指数符号的大小写),F:固定点格式,G:普通格式,N:用逗号表示千分符,P:百分数格式,X:十六进制格式。如下输出为:¥940.23,¥940.2,¥940.2300。
还有一个技巧是,可以使用占位符来代替这些格式字符串,如下输出为:.23。
因为如果在符号(#)的位置上没有字符,就会忽略该符号,如果在0的位置上有一个字符,就用这个字符代替0,否则显示0。
九、使用注释
1.//This is a singleline comment
2./*This comment
spans multiple lines*/
3.XML文档:通过///可以把包含类型和类型成员的文档说明的XML标记放在代码中。
十、C#预处理指令:以#开头,不会转化为可执行代码中的命令,但是会影响编译过程的各个方面。
1.#define、#undef告诉编译器存在或删除给定名称的符号,通常和#if一起使用;
2.#if、#elif、#else、#endif告诉编译器是否要编译某个代码块,如:
这段代码会像往常那样执行,但Console.WriteLine命令包含在#if字句中,只有在前面的#define命令定义了符号DEBUG后才执行。当编译器遇到#if语句后,会先检查相关符号是否存在,如果存在,就编译#if字句中的代码。否则,编译器会忽略所有的代码,知道遇到匹配的#endif指令为止。
3.#warning,#error:编译器遇到它们时会分别产生警告和错误,如果编译器遇到@warning指令,会给用户显示@warning指令后面的文本,之后编译继续进行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL代码。
4.#region,#endregion:用于把一段代码标记为有给定名称的一个块。
5.#line:可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。
6.#pragma:可以抑制或还原指定的编译警告。#pragma指令可以在类或方法级别执行,下面例子禁止“字段未使用”警告,然后在编译MyClass类后还原该警告。
十一、C#编程规则
1.标识符的规则:标识符是给变量、用户自定义类型和这些类型的成员指定的名称,标识符区分大小写,C#中的标识符有两条规则:首字符必须为字母或下划线,不能把C#关键字用作标识符。
C#保留关键字有很多这里不再列举,如果需要把某一保留字用作标识符,可以在标识符前面加上前缀符号@,告知编译器其后的内容是一个标识符,而不是C#关键字,即class不是有效标识符,而@class是有效标识符。
标识符也可以包含Unicode字符,用语法\uXXXX来指定,如\u005fdentifier是有效标识符。
2.用法约定:任何一种开发语言都有一些传统的编程风格,是一种约定。
在许多情况下,名称都应使用PascaI大小写形式,Pascal大小写形式指名称中单词的首字母大写,如EmployeeSalary,类型中所有私有成员字段的名称都应是camel大小写形式,camel大小写形式
指名称中除首个单词外的单词首字母大写。如employeeSalary。
使用C#要先弄明白一下知识:声明变量、变量的初始化和作用域、C#的预定义数据类型、在C#程序中使用条件语句、循环语句和跳转语句指定执行流、枚举、名称空间、Main()方法、基本命令行C#编译器选项、使用System.Console执行控制台I/O、使用内部注释和文档编制功能、预处理器指令、C#编程的推荐规则和约定。C#的基础知识是后面使用C#开发程序的基础,阅读完本章后,读者就有足够的C#知识编写简单的程序了,但还不能使用继承等面向对象特征,这些内容将在以后介绍。
一、简单的C#程序
1.在文本编辑器中输入下面的代码,保存为后缀名为.cs的文件,如保存为:First.cs。
using System; namespace Wrox { public class MyFirstClass { static void Main() { Console.WriteLine("Hello World!"); Console.ReadLine(); return; } } }
2.对源文件运行C#命令行编译器(csc.exe),编译这个程序:csc First.cs 此时就会在相应目录下生成First.exe文件,双击该文件即在编辑器中显示Hello World!
二、变量
1.在C#中声明变量使用下面的语法:datetype identifier,如int i;声明了int变量i,编译器不允许在表达式中使用这个变量,除非用一个值初始化这个变量。
2.声明i之后,就可以使用赋值运算符(=)给他赋值:i=10;还可以在一行代码中声明变量并且赋值:int i =20;
3.可以在一条语句中声明和初始化多个相同类型的变量:int i=1,j=2;
4.类型推断(type inference)使用var关键字,这时编译器可以根据变量的初始值推断变量的类型。如:var someNum=100;等价于int someNum=100;
变量一旦声明确定类型之后就不能改变类型了,就必须遵循其他变量类型遵循的强类型化规则。
5.变量的作用域是可以访问该变量的代码区域,一旦出去该区域,该变量就不可以在使用。
6.常量是其值在使用过程中不会发生变化的变量,在变量的前面加上关键字const,就可以把该变量指定为一个常量。const int a = 100;
常量必须在声明时初始化;
常量的值必须能在编译时用于计算,不能从一个变量中提取的值初始化常量;如果这样做请使用只读字段;
常量总是静态的,注意不可以用static修饰const常量。
三、预定义数据类型
1.值类型和引用类型:从概念上看,区别是值类型直接存储其值,应用类型存储对值的引用。
2.CTS类型:在C#声明一个int类型时,实际上是.Net结构的System.Int32的一个实例。
3.预定义值类型:内置的CTS值类型表示基本类型,如整形、浮点型、字符型和布尔类型。
如:sbyte-System.SByte,short-System.Int16,int-System.Int32,long-System.Int64,byte-System.Byte,ushort-System.UInt16,uint-System.UInt32,ulong-System.UInt64,float-System.Single,double-System.Double,decimal-System.Decimal,bool-System.Boolen,char-System.Char。
4.预定义的引用类型:
object-System.Object是所有类型的基类型,所有其他的类型都是从object直接或间接继承而来;
string-System.String。
四、流控制--控制流程语句
1.条件语句:if..else;switch..case语句;
2.循环语句:for循环;while循环;do..while循环;foreach循环;
3跳转语句:goto语句;break语句;continue语句;return语句;
五、枚举--用enum修饰
枚举是用户定义的整数类型,创建枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值,枚举使代码更清晰,允许用描述性的名称表示整数值。简单应用如下:
class EnumExample { public enum TimeOfDay { Morning=0, Afternoon=1, Evening=2 } public static int Main() { WriteGreeting(TimeOfDay.Morning); return 0; } static void WriteGreeting(TimeOfDay timeOfDay) { switch(timeOfDay) { case TimeOfDay.Morning: Console.WriteLine("Good Morning"); break; case TimeOfDay.Afternoon: Console.WriteLine("Good Afternoon"); break; case TimeOfDay.Evening: Console.WriteLine("Good Evening"); break; defult: Console.WriteLine("hello!"); break; } } }
C#枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构,表示可以对它们调用方法,执行有用的任务。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。
可以从字符串中获取枚举值,请看下面一段代码:
TimeOfDay time = (TimeOfDay)Enum.Parse(typeof(TimeOfDay),"afternoon",true); Console.WriteLine((int)time);
这样就会返回1,Enum.Parse()方法实现从字符串中获取枚举值,并转化为整数。Enum.Parse()的第一个参数是要使用的枚举类型,第二个参数是要转换的字符串,第三个参数指定转换时是否忽略大小写。
六、名称空间
名称空间提供了一种组织相关类和其他类型的方式,与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。名称空间以句点(.)隔开,最后是类名。如:System.Date.DbHelp。命名空间通过Using语句引入。如:Using System.Date;
七、Main()方法
C#程序是从方法Main()开始执行的,这个方法必须是类或结构的静态方法,并且其返回值必须是int或void,Main()方法要么不带参数,要么是string类型的数组(string[] args)。我们给入口点方法指定什么级别并不重要,即使把该方法标记为private,它也可以运行。
八、控制台I/O
Console.Write();Console.WriteLine();注意可以添加一个格式字符串以及一个可选的精度值,主要格式字符串有C:本地货币格式,D:十进制格式,E:科学计数法(e的大小写确定指数符号的大小写),F:固定点格式,G:普通格式,N:用逗号表示千分符,P:百分数格式,X:十六进制格式。如下输出为:¥940.23,¥940.2,¥940.2300。
decimal i=940.23m; Console.WriteLine("{0:c}",i); Console.WriteLine("{0:c1}",i); Console.WriteLine("{0:c4}",i);
还有一个技巧是,可以使用占位符来代替这些格式字符串,如下输出为:.23。
double d = 0.234; Console.WriteLine("{0:#.00}",d);
因为如果在符号(#)的位置上没有字符,就会忽略该符号,如果在0的位置上有一个字符,就用这个字符代替0,否则显示0。
九、使用注释
1.//This is a singleline comment
2./*This comment
spans multiple lines*/
3.XML文档:通过///可以把包含类型和类型成员的文档说明的XML标记放在代码中。
十、C#预处理指令:以#开头,不会转化为可执行代码中的命令,但是会影响编译过程的各个方面。
1.#define、#undef告诉编译器存在或删除给定名称的符号,通常和#if一起使用;
2.#if、#elif、#else、#endif告诉编译器是否要编译某个代码块,如:
int DoSomeWork(double x) { #if DEBUG Console.WriteLine("x is "+x); #endif }
这段代码会像往常那样执行,但Console.WriteLine命令包含在#if字句中,只有在前面的#define命令定义了符号DEBUG后才执行。当编译器遇到#if语句后,会先检查相关符号是否存在,如果存在,就编译#if字句中的代码。否则,编译器会忽略所有的代码,知道遇到匹配的#endif指令为止。
3.#warning,#error:编译器遇到它们时会分别产生警告和错误,如果编译器遇到@warning指令,会给用户显示@warning指令后面的文本,之后编译继续进行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL代码。
4.#region,#endregion:用于把一段代码标记为有给定名称的一个块。
5.#line:可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。
6.#pragma:可以抑制或还原指定的编译警告。#pragma指令可以在类或方法级别执行,下面例子禁止“字段未使用”警告,然后在编译MyClass类后还原该警告。
#pragma warning disable 169 public class MyClass { int neverUsedField; } #pragma warning restore 169
十一、C#编程规则
1.标识符的规则:标识符是给变量、用户自定义类型和这些类型的成员指定的名称,标识符区分大小写,C#中的标识符有两条规则:首字符必须为字母或下划线,不能把C#关键字用作标识符。
C#保留关键字有很多这里不再列举,如果需要把某一保留字用作标识符,可以在标识符前面加上前缀符号@,告知编译器其后的内容是一个标识符,而不是C#关键字,即class不是有效标识符,而@class是有效标识符。
标识符也可以包含Unicode字符,用语法\uXXXX来指定,如\u005fdentifier是有效标识符。
2.用法约定:任何一种开发语言都有一些传统的编程风格,是一种约定。
在许多情况下,名称都应使用PascaI大小写形式,Pascal大小写形式指名称中单词的首字母大写,如EmployeeSalary,类型中所有私有成员字段的名称都应是camel大小写形式,camel大小写形式
指名称中除首个单词外的单词首字母大写。如employeeSalary。
相关文章推荐
- 《C#高级编程》【第二章】核心C#编程 -- 学习笔记
- C#高级编程第9版 第二章 核心C# 读后笔记
- c#高级编程第七版 学习笔记 第二章 核心c#
- C#高级编程 (第六版) 学习 第二章:C#基础
- 【C#高级编程】笔记之核心C#
- 【C#高级编程】笔记之核心C#
- 《C#高级编程》 读书心得1--核心C# 几点你可能没注意,但很基础的小东西。
- 第二章:核心C#
- C# in depth ( 第二章 C#1.0所搭建的核心基础)
- 第二章:核心C#
- C#批量替换文本文件内容的核心代码
- C# 核心语法-反射
- 深入理解 c# 第二章 数组协变以及执行时类型检查
- 项目实践精解:C#核心技术应用开发
- 《C#高级编程(第6版)》第2章筆記----第2章C# 基 础
- C#【Fox即时通讯核心】 开发记录之四(服务端多线程异步处理数据 主程序大致结构)
- 第二章 编写C#程序
- 深入.NET平台和C#编程 第二章 上机3 经理评分
- 《Python核心编程》第二版第36页第二章练习 续三 -Python核心编程答案-自己做的-