您的位置:首页 > 编程语言 > C#

C#语言基础

2007-09-04 12:22 190 查看
[align=center]C#语言基础[/align]
从语言的发展历史上来说,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#语言的基本语法和简单使用。
[align=center]5.1数据类型[/align]
C#支持两种主要的数据类型:值类型和引用类型。值类型包含简单类型(字符型、整数型和浮点型等)、结构类型和枚举类型。引用类型包含类类型、代表类型、数组类型和接口类型。
值类型和引用类型的区别在于:值类型的变量包含数据,而引用类型的变量包含的是对象的引用。在类类型中最常用到的类是string类,下面我们介绍string类以及数组的使用。

nstring类
C#中定义了一个string类,专门用于对字符串的操作,这个类位于System命名空间中,string是.NET框架中System.String的别名。
字符串的应用非常广泛,在类的定义中封装了许多内部操作,我们可以直接使用。
使用相等运算符(==和!=)比较string对象的“值”,+运算符用于连接字符串,[]运算符访问string中的个别字符,字符串括在双引号(")内。
例如:
stringa="Operate";
stringb=a+"System";
charc=b[0];
boolflag=(a==b);

n数组

C#数组从零开始建立索引,即数组索引从零开始。C#中数组的工作方式与在大多数其他流行语言中的工作方式类似,但还有一些差异应引起注意。
声明数组时,方括号([])必须跟在类型后面,而不是标识符后面。在C#中,将方括号放在标识符后是不合法的语法。例如:

int[]table;//不能是table[];

另一细节是,数组的大小不是其类型的一部分。这样使得可以声明一个数组并向它分配int对象的任意数组,而不管数组长度如何。

int[]numbers;//声明一个任意长度的整数类型数组
numbers=newint[10];//长度为10的一阶数组
numbers=newint[20];//长度为20的一阶数组

声明数组并不实际创建它们,在C#中,数组是对象,必须进行实例化。
5.2操作符
表达式由操作数和操作符组成,操作符指出了对操作数的操作,比如操作符有+,-,/,和new,操作数可以是文字、域、当前变量或表达式。本节介绍常用的操作符,以及操作符的优先级。
5.2.1常用的操作符
依照操作符作用的操作数的个数来分,C#中有三种类型的操作符:
u一元操作符。一元操作符带一个操作数并使用前缀符(如–
x
)或后缀符(如
x++
)。
u二元操作符。二元操作符带两个操作数并且全都使用中缀符(如
x
+
y
)。
u三元操作符。只存在一个三元操作符
?:
。三元操作符带三个操作数并使用中缀符(
c?
x:
y
)。

C#提供大量操作符,表5.1列举了C#支持的所有操作符。
[align=center]表5.1操作符[/align]

[align=center]操作符类别[/align]
[align=center]操作符[/align]
算术
+-*/%
逻辑(布尔型和按位)
&|^!~&&||truefalse
字符串串联
+
递增、递减
++--
移位
<<>>
关系
==!=<><=>=
赋值
=+=-=*=/=%=&=|=^=<<=>>=
成员访问
.
索引
[]
转换
()
条件
?:
委托串联和移除
+-
创建对象
New
类型信息
issizeofTypeOf
溢出异常控制
checkedunchecked
间接寻址和地址
*->[]&
5.2.2操作符的优先级
表达式中操作符的计算顺序由操作符的优先级和顺序关联性确定。表达式中的操作数从左到右进行计算。操作符优先级符合逻辑模式,如表5.2所示。具有最高运算优先级的操作符在表的顶部。
[align=center]表5.2操作符优先级[/align]

[align=center][/align]
[align=center]操作符[/align]
一元操作符
().[]++---newtypeofsizeofcheckeduncheked
乘法
*/%
加法
+-
递增、递减
++--
移位
<<>>
关系
<>>=<=is
等号
==!=
位AND
&
位XOR
^
位OR
|
布尔AND
&&
布尔OR
||
条件操作符
?:
赋值操作符
=+=-=*=etc
5.3控制语句
本节介绍C#语言中常用的几种控制语句,分别是:选择语句,循环语句,以及跳出、继续和转向语句。
5.3.1选择语句
选择语句使程序控制基于某个条件是否为真传递给特定的流。选择语句有if语句和switch语句两种。

nIf…else语句

if语句是表达式求得true值时执行代码块的控制语句。它的形式为:

if(expression)
statement1
[else
statement2]

如果expression为true,则执行statement1。如果可选的else子句存在并且expression求得false值,则执行statement2。执行if语句之后,控制传递给下一个语句。
If语句允许嵌套,嵌入语句可以是一个语句块。语句块的格式:{语句列表}

n
switch语句

switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择。switch语句的形式为:

switch(expression)
{

caseconstant-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之外。
5.3.2循环语句
通过使用循环语句可以创建循环。循环语句导致嵌入语句根据循环终止条件多次执行。除非遇到跳转语句,否则这些语句将按顺序执行。循环语句有while语句、do语句、for语句和foreach语句四种。
nwhile语句
while语句执行一个语句或一个语句块,直到指定的表达式求得false值为止。它的形式为:

while(expression)
statement

由于expression的测试发生在循环的执行之前,因此while循环执行零次或更多次。
当break、goto、return或throw语句将控制传递到循环之外时可以终止while循环。若要将控制传递给下一个循环但不退出循环,请使用continue语句。
ndo语句
do语句重复执行一个语句或一个语句块,直到指定的表达式求得false值为止。它的形式为:
do
statement
while(expression)

与while语句不同,do语句的体循环至少执行一次,第一次的执行与expression的值无关。

nfor语句

for循环重复执行一个语句或一个语句块,直到指定的表达式求得false值为止。它的形式为:

for([initializers];[expression];[iterators])
statement

for语句按下列方式重复执行statement:
首先,计算initializers。然后,当expression求得true值时,执行statement并计算iterators。当expression求得false值时,控制传递到循环之外。
由于expression的测试发生在循环的执行之前,因此for语句执行零次或更多次。

nforeach语句

foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下:
foreach(typeidentifierinexpression)
statement
其中:
type表示identifier的类型。
identifier表示集合元素的循环变量。
expression对象集合或数组表达式。集合元素的类型必须可以转换为identifier类型。
statement要执行的嵌入语句。

嵌入语句为数组或集合中的每个元素继续执行。当为集合中的所有元素完成循环后,控制传递给foreach块之后的下一个语句。
5.3.3跳出、继续和转向语句
使用跳转语句执行分支,该语句导致立即传递程序控制。跳转语句有breakcontinuegotoreturn。

nbreak语句

break语句终止它所在的最近的封闭循环或条件语句。控制传递给终止语句后面的语句(如果有的话)。
break语句的形式为:
break;

ncontinue语句

continue语句将控制传递给它所在的封闭迭代语句的下一个迭代。
continue语句的形式为:
continue;

ngoto语句

goto语句将程序控制直接传递给标记语句。
goto语句的形式为下列之一:
(1)gotoidentifier;
(2)gotocaseconstant-expression;
(3)gotodefault;
其中:

identifier表示一个标签。
constant-expression一个switch-case标签。

nreturn语句

return语句用于函数返回值,也可以像break一样终止循环或选择。如果方法为void类型,该语句不带值。
return语句的形式为:
return[expression];
其中,expression由方法返回的值。
5.4命名空间
5.4.1什么是命名空间
在C#中会经常使用到命名空间,例如System和System.Data,命名空间(Namespaces)是C#用来组织程序的,由于使用命名空间可以减少错误和重用代码,而且分层的组织使一个程序的成员传到另一个程序变得更容易。尽管不强制,但良好的编程习惯是创建命名空间,以清楚地识别应用程序的层次。
命名空间可以看作类的包含,就像是文件夹包含着文件一样。命名空间在.NET中是很重要的概念,因为.NET的基类实在是太多了,微软公司带的就有好几千个基类,再加上用户自己写的基类就更多了。把基类放在命名空间里面,可以把相类似的基类放在一起,也可以防止名字上的冲突。有了命名空间,即使相同名字的基类(里面的内容不同),可以通过把它们放在不同的命名空间里面,从而解决名字冲突的问题。就像把名字相同的文件放在不同的文件夹里面一样。
5.4.2命名空间的声明和调用
命名空间的声明和调用涉及到C#的两个关键字:namespace和using。

1.namespace

namespace关键字用于声明一个范围。
命名空间声明的格式如下:
namespacename[.name1]…]{
type-declaration
}
其中:
name,name1命名空间名可以是任何合法的标识符。
type-declarations
在一个命名空间中,可以声明一个或多个下列类型:
另一个命名空间,class,interface,struct,enum,delegate。
2.using

使用using命令可以避免都要写类的全名,因为全名一般都很长。
using命令的用法如下:
using命名空间名称;
5.5C#示例
本节通过一个实例学习使用C#语言进行编程,该例的功能是:首先设定一个字符串“productID,Name,Price,Count”,将该字符串以逗号为分隔符分成多个字符串,分别是:“productID”,“Name”,“Price”和“Count”。
程序代码如下:
stringfirstString="productID,Name,Price,Count";
string[]cols=newstring[4];
inti=0;
intpos=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”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: