C#语言基础
从语言的发展历史上来说,C语言一直是其中的主线。C语言的出现对程序员来说意义是非常重大的。在没有C语言的日子里,程序员们整天都在用机器语言及汇编语言来编写一些繁琐而又难懂的程序。那时候编程序是一个极高深、极抽象的工作。在C语言出现后,程序员使用C语言编写程序感到限制少、灵活性大、功能强,可以编写任何类型的程序。现在C语言已经风靡全世界,成为应用最广泛的计算机语言之一。
后来,世界上又出现了面向对象(OO)的软件工程方法,面向对象的程序语言C++使原来面向过程的开发过程出现了历史的改变。C++是C的扩充,C++是一种基于C的面向对象的语言,它在提供面向对象程序设计的同时,保留了C语言的高度简洁和高效率等优点。
再后来, SUN在C/C++基础上推出了Java语言,Java语言借用了C/C++的许多结构和思想。Java语言更简单,更易学习,它取消了不少C或C++的特点,但也加入一些新的特性。
现在,微软又推出了C#,所谓的“#”,其实是四个加号的叠加,也就是说C# = C++++。C#是Microsoft为.NET平台量身定做的新程序语言,它拥有如VB一样的简单易用性,并同时具备C++的强大功能。许多C++中令人难以学习或容易出错的功能,如指针、多种继承等,在C#中已经删除。C#也借鉴了Java语言的许多优点,并且对Java语言的一些不足作了改进。
下面,开始简单介绍一下C#语言的基本语法和简单使用。
C#支持两种主要的数据类型:值类型和引用类型。值类型包含简单类型(字符型、整数型和浮点型等)、结构类型和枚举类型。引用类型包含类类型、代表类型、数组类型和接口类型。
值类型和引用类型的区别在于:值类型的变量包含数据,而引用类型的变量包含的是对象的引用。在类类型中最常用到的类是string类,下面我们介绍string类以及数组的使用。
n string类
C#中定义了一个string类,专门用于对字符串的操作,这个类位于System命名空间中,string 是 .NET 框架中 System.String 的别名。
字符串的应用非常广泛,在类的定义中封装了许多内部操作,我们可以直接使用。
使用相等运算符(== 和 !=)比较 string 对象的“值”,+ 运算符用于连接字符串,[] 运算符访问 string 中的个别字符,字符串括在双引号 (") 内。
例如:
string a = "Operate";
string b = a+" System";
char c=b[0];
bool flag=(a==b);
n 数组
C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似,但还有一些差异应引起注意。
声明数组时,方括号([])必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。例如:
int[] table; // 不能是table[];
另一细节是,数组的大小不是其类型的一部分。这样使得可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。
int[] numbers; // 声明一个任意长度的整数类型数组
numbers = new int[10]; // 长度为10的一阶数组
numbers = new int[20]; //长度为20的一阶数组
声明数组并不实际创建它们,在C#中,数组是对象,必须进行实例化。
表达式由操作数和操作符组成,操作符指出了对操作数的操作,比如操作符有+,-,/,和new,操作数可以是文字、域、当前变量或表达式。本节介绍常用的操作符,以及操作符的优先级。
依照操作符作用的操作数的个数来分,C#中有三种类型的操作符:
u 一元操作符。一元操作符带一个操作数并使用前缀符(如 –
x)或后缀符(如 x++)。 u 二元操作符。二元操作符带两个操作数并且全都使用中缀符(如
x + y)。 u 三元操作符。只存在一个三元操作符
?:。三元操作符带三个操作数并使用中缀符 (c? x: y)。 C# 提供大量操作符,表 5.1列举了C#支持的所有操作符。
表 5.1 操作符
|
操作符类别
|
操作符
|
|
算术
|
+ - * / %
|
|
逻辑(布尔型和按位)
|
& | ^ ! ~ && || true false
|
|
字符串串联
|
+
|
|
递增、递减
|
++ --
|
|
移位
|
<< >>
|
|
关系
|
= = != < > <= >=
|
|
赋值
|
= += -= *= /= %= &= |= ^= <<= >>=
|
|
成员访问
|
.
|
|
索引
|
[]
|
|
转换
|
()
|
|
条件
|
?:
|
|
委托串联和移除
|
+ -
|
|
创建对象
|
New
|
|
类型信息
|
is sizeof TypeOf
|
|
溢出异常控制
|
checked unchecked
|
|
间接寻址和地址
|
* -> [] &
|
表达式中操作符的计算顺序由操作符的优先级和顺序关联性确定。表达式中的操作数从左到右进行计算。操作符优先级符合逻辑模式,如表 5.2所示。具有最高运算优先级的操作符在表的顶部。
表 5.2 操作符优先级
|
组
|
操作符
|
|
一元操作符
|
() . [] ++ -- - new typeof sizeof checked uncheked
|
|
乘法
|
* / %
|
|
加法
|
+ -
|
|
递增、递减
|
++ --
|
|
移位
|
<< >>
|
|
关系
|
< > >= <= is
|
|
等号
|
== !=
|
|
位AND
|
&
|
|
位XOR
|
^
|
|
位OR
|
|
|
|
布尔AND
|
&&
|
|
布尔OR
|
||
|
|
条件操作符
|
?:
|
|
赋值操作符
|
= += -= *= etc
|
本节介绍C#语言中常用的几种控制语句,分别是:选择语句,循环语句,以及跳出、继续和转向语句。
选择语句使程序控制基于某个条件是否为真传递给特定的流。选择语句有if语句和switch语句两种。
n If…else语句
if 语句是表达式求得 true 值时执行代码块的控制语句。它的形式为:
if (expression)
statement1
[else
statement2]
如果 expression 为 true,则执行 statement1。如果可选的 else 子句存在并且 expression 求得 false 值,则执行 statement2。执行 if 语句之后,控制传递给下一个语句。
If语句允许嵌套,嵌入语句可以是一个语句块。语句块的格式:{语句列表}
n switch语句 switch 语句是一个控制语句,它通过将控制传递给其体内的一个 case 语句来处理多个选择。switch 语句的形式为:
switch (expression)
{
case constant-expression:
statement
jump-statement
[default:
statement
jump-statement]
}
控制传递给 constant-expression 与 expression 匹配的 case 语句。switch 语句可以包含任意数量的 case 实例,但同一 switch 语句中的两个 case 常数不能具有相同的值。语句体从选定的语句开始执行,一直执行到 jump-statement 将控制传递到 case 体之外为止。
如果 expression 不匹配任何 constant-expression,则控制传递给可选的 default 标签后面的 statement。如果没有 default 标签,则控制传递到 switch 之外。
通过使用循环语句可以创建循环。循环语句导致嵌入语句根据循环终止条件多次执行。除非遇到跳转语句,否则这些语句将按顺序执行。 循环语句有while语句、do语句、for 语句和foreach 语句四种。
n while语句
while 语句执行一个语句或一个语句块,直到指定的表达式求得 false 值为止。它的形式为:
while (expression)
statement
由于 expression 的测试发生在循环的执行之前,因此 while 循环执行零次或更多次。
当 break、goto、return 或 throw 语句将控制传递到循环之外时可以终止 while 循环。若要将控制传递给下一个循环但不退出循环,请使用 continue 语句。
n do语句
do 语句重复执行一个语句或一个语句块,直到指定的表达式求得 false 值为止。它的形式为:
do
statement
while (expression)
与 while语句不同,do 语句的体循环至少执行一次,第一次的执行与 expression 的值无关。
n for 语句
for 循环重复执行一个语句或一个语句块,直到指定的表达式求得 false 值为止。它的形式为:
for ([initializers]; [expression]; [iterators])
statement
for 语句按下列方式重复执行 statement:
首先,计算 initializers。 然后,当 expression 求得 true 值时,执行 statement 并计算 iterators。 当 expression 求得 false 值时,控制传递到循环之外。
由于 expression 的测试发生在循环的执行之前,因此 for 语句执行零次或更多次。
n foreach语句
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下:
foreach (type identifier in expression)
statement
其中:
type 表示identifier 的类型。
identifier 表示集合元素的循环变量。
expression 对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。
statement 要执行的嵌入语句。
嵌入语句为数组或集合中的每个元素继续执行。当为集合中的所有元素完成循环后,控制传递给 foreach 块之后的下一个语句。
使用跳转语句执行分支,该语句导致立即传递程序控制。跳转语句有break continue goto return。
n break 语句
break 语句终止它所在的最近的封闭循环或条件语句。控制传递给终止语句后面的语句(如果有的话)。
break 语句的形式为:
break;
n continue语句
continue语句将控制传递给它所在的封闭迭代语句的下一个迭代。
continue语句的形式为:
continue;
n goto 语句
goto 语句将程序控制直接传递给标记语句。
goto 语句的形式为下列之一:
(1) goto identifier;
(2) goto case constant-expression;
(3) gotodefault;
其中:
identifier 表示一个标签。
constant-expression 一个 switch-case 标签。
n return 语句
return 语句用于函数返回值,也可以像break一样终止循环或选择。如果方法为 void 类型,该语句不带值。
return 语句的形式为:
return [expression];
其中,expression 由方法返回的值。
在C#中会经常使用到命名空间,例如System和System.Data,命名空间(Namespaces)是C#用来组织程序的,由于使用命名空间可以减少错误和重用代码,而且分层的组织使一个程序的成员传到另一个程序变得更容易。尽管不强制,但良好的编程习惯是创建命名空间,以清楚地识别应用程序的层次。
命名空间可以看作类的包含,就像是文件夹包含着文件一样。命名空间在.NET中是很重要的概念,因为.NET的基类实在是太多了,微软公司带的就有好几千个基类,再加上用户自己写的基类就更多了。把基类放在命名空间里面,可以把相类似的基类放在一起,也可以防止名字上的冲突。有了命名空间,即使相同名字的基类(里面的内容不同),可以通过把它们放在不同的命名空间里面,从而解决名字冲突的问题。就像把名字相同的文件放在不同的文件夹里面一样。
命名空间的声明和调用涉及到C#的两个关键字:namespace和using。
1. namespace
namespace关键字用于声明一个范围。
命名空间声明的格式如下:
namespace name[.name1]…]{
type-declaration
}
其中:
name, name1 命名空间名可以是任何合法的标识符。
type-declarations
在一个命名空间中,可以声明一个或多个下列类型:
另一个命名空间,class,interface,struct,enum,delegate。
2. using
使用using命令可以避免都要写类的全名,因为全名一般都很长。
using命令的用法如下:
using 命名空间名称;
5.5 C# 示例
本节通过一个实例学习使用C#语言进行编程,该例的功能是:首先设定一个字符串“productID,Name,Price,Count”,将该字符串以逗号为分隔符分成多个字符串,分别是:“productID”,“Name”,“Price”和“Count”。
程序代码如下:
string firstString="productID,Name,Price,Count";
string[] cols=new string[4];
int i=0;
int pos=firstString.IndexOf(",");
while(pos!=-1)
{
cols[i]=firstString.Substring(0,pos);
firstString=firstString.Substring(pos+1);
pos=firstString.IndexOf(",");
i++;
}
cols[i]=firstString;
程序运行结果是:
cols数组中分别存放了四个字符串,分别是:“productID”,“Name”,“Price”和“Count”。
本文介绍了C#语言的基础知识,包括数据类型、操作符、控制语句以及命名空间等内容。通过实例演示了如何使用C#处理字符串。
122

被折叠的 条评论
为什么被折叠?



