C#高级编程第2章-核心C#

时间:2023-03-08 21:13:41
C#高级编程第2章-核心C#

内容提要:

声明变量;变量的初始化和作用域;C#的预定义数据类型;在C#程序中使用条件语句、循环和跳转语句指定执行流;枚举;名称空间;

Main()方法;基本命令行C#编译器选项;使用System.Console执行控制台I/O;使用内部注释和文档编制功能;预处理指令;C#编程的推荐规则和约定。

一、第一个C#程序

Q:如何利用c#命令行编译器(csc.exe)编译一个程序?

A: css ClassName.cs  (Tool :Visual studio 2010 Command Prompt)

Q:C# 区分大小写的吗?

A:C#区分大小写的。提示:对于控制台应用程序、Windows应用程序都有一个入口点——Main()方法(M一定是大写的)

二、变量

Q:C# 定义变量的语法?

A: DataType Identifier;

Q: C# 声明变量的例子

A:C#高级编程第2章-核心C#

提示:变量的初始化是C#强调安全性的一个例子。

Q:C#如何确保变量使用前进行初始化?

A:方法一:变量是类或结构中的字段,如果没有显式初始化,创建这些变量时,其默认值就是0;方法二:方法的局部变量必须在代码中显式初始化,之后才能在语句中使用它们的值。

Q:类型推断

A:类型推断(type reference)使用var 关键字。编译时进行,因为运行时都是类型安全的代码。

Q:类型推断的规则

A:(1)变量必须初始化。否则,编译器就没有推断变量类型的依据。(2)初始化器({})不能为空。(3)初始化器必须放在表达式中。(4)不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象。

Q:确定变量作用域的规则?

A: (1)只要类在某个作用域内,其字段(成员变量)也在某个作用域内。(2)局部变量存在于表示声明该变量的块语句或方法结束的右括号之前的作用域内。

(3)在for、while或类似语句中声明的局部变量存在于该循环体内。

Q:字段和局部变量的作用域冲突

A:某些情况下,可以区分名称相同(完全限定的名称不同)、作用域相同的两个标识符。编译器只允许声明第2个变量。原因是C#在变量之间有一个基本区分,它把类级别声明的变量看作字段,而把在方法中声明的变量看作局部变量。例如:

C#高级编程第2章-核心C#

Q: 什么是常量?

A:常量是其值在使用过程中不会发生变化的变量。 语法: 在变量之前加const关键字。

Q: 常量的特点?

A:(1)常量必须在声明时初始化。指定以后就不能再改变了。(2)常量的值必须能在编译时用于计算。(3)常量总是静态的。不允许在常量中声明static。

Q: 在程序中使用常量的好处?

A:(1)由于使用易于读取的名称替代了教难读懂的数字或者字符串,常量使程序变得更易于阅读。(2)常量使程序更易于修改。(3)常量更容易避免程序出错

三、预定义数据类型

Q: C#预定义类型

A:C#有15种预定义类型,13个是值类型(8个整型(sbyte,short,int,long,byte,ushort,uint,ulong),2个浮点型(float,double),1个decimal类型,1个char类型,1个bool类型),两个是引用类型(string和Object)。

Q: 预定义的整型类型?

A:sbyte(8位有符号整数);short(16位有符号整数);int(32位有符号整数);long(64位有符号整数);byte(8位无符号整数);ushort(16位无符号整数);uint(32位无符号整数);ulong(64位无符号整数);

提示:decimal类型不是基本类型,所以计算时会有性能损失。

Q:使用Object类型可以解决的两个问题:

A:(1)可以使用Object引用绑定任何子类型的对象。(2)Object类型执行许多一般用途的基本方法,包括Equals()、GetHashCode()、GetType()和ToString()。

四、流控制

Q:条件语句?

A:if...else;switch...case

提示:对于switch...case中如果有一条case语句为空,就可以从这个case跳到下一个case上。特别注意任何两个case语句的值不能相同。

C#高级编程第2章-核心C#

Q:循环语句?

A:for;foreach;while;do....while;

Q:跳转语句?

A:goto;break;continue;return;

五、枚举

Q: 什么是枚举?

A:枚举是用户自定义的整数类型。在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值。

Q:使用枚举的优势?

A: (1)枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。(2)枚举是代码更清晰,允许用描述性的名称表示整数值。(3)枚举也使代码更易于键入。

六、名称空间

Q:名称空间?

A:名称空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。

提示:注意不允许在另一个嵌套的名称空间中声明多部分的名称空间。

Q:using关键字的特别用处?

A:using关键字的另一个用途就是给类和名称空间指定别名。语法:using alias = NamespaceName;

七、Main方法

Main方法必须是类或结构的静态方法,并且其返回类型必须是int或void。

Q:如何处理多个Main方法?

A:对于控制台或Windows应用程序,如果有多个Main方法编译器就会返回编译错误。对于一个类中有多个Main方法可以在编译时指定Main方法的方式来告诉编译器那个Main方法作为程序的入口点。csc ClassName.cs /main: Namespace

Q: 给Main方法传递的参数

A:例如 ArgsExample编译后,可以这样的传递参数:ArgsExample /a /b /c。接受到的一个string数组时由/a /b /c组成。

八、编译C#文件的相关指令

Q: 如何指定编译为控制台应用程序、带清单的类库、没有清单的组件和Windows应用程序?

A:默认情况下编译为控制台应用程序,也可以用(/t:exe)指定;带清单的类库(/t:library);没有清单的组件(/t:module);Windows应用程序(/t:winexe

Q:如何指定编译生成的输出文件名?

A:使用选项(/out);注意/out和/t选项必须在编译文件的文件名前面。

九、控制台I/O

Q:预定义类型的主要格式字符串

A:C#高级编程第2章-核心C#

使用注释和使用预处理指令,参考MSDN。C#编程规则,可以参考<<.NET设计规范:约定、惯用法与模式>>

小结

本章主要介绍一些C#的基本语法,和编写C#应用程序需要掌握的内容。