C#的基本语法介绍
www.wenhui.org 10/30/2002 CSharp vs Java
我现在还住在一个叫做六郎庄的地方,这里距中关村很近。我说这话的意思是本文出自一个小鳖三之手,而且他常常到北大去“剽学”,这种有些类似于贼的行为是被许多人所不屑的,因而也有人称其为“嫖客”。我便是其中的一位。事实上如果你真的成为他们中的一员,才会发现大学里培养的很多人才是从这里出去的。有时候别人怎么称呼你并不重要,重要的是你学习与生活的决心。
在c#出世之前,我是一名VB程序爱好者,微软的东西一直来说我都比较喜欢,一来是高手之做,二来确被他们的思想所震撼。C#是随vs.net出现的一种新生语言,#(sharp)是music中的一个符号,而且也有锋利的意思。对于我来说,更愿意将其看做是c++++,四个+的组合。究其根本还是c,只是提练的更简洁/更方便/更帅呆而已,它经历了c++、java(c+++)到c#(c++++),如果你是一名vb程序员,我见意你能花点时间学习c#,没有别的原因,只是我的感觉而已。vs.net新推出的时候,我准备找点samples来看,结果发现很多是c#的实例,这样才下定决心学习c#,但并不是放弃vb,两种语言都很帅,如果你习惯像我一样愿意copy/paste代码来做程序的话,相信我,没错的。
Note: c#的比较灵活,如果你用notepad写过script脚本的话,你会喜欢c#的加入。当然vs.net来做看起来可能会更棒。比较重要的一点,如果你曾经是vb程序员的话,那么就得注意一下c#程序的一些规则,大小写是不一样的。在这方面我吃了不少的苦头,希望你也吃点,这样记得比较牢靠。
一、基本数据类型
这是比较烦燥的一部分,但是有些东西你就得强记,如果偷了懒,最后吃亏的还是你自己。这一点要切记。
在c#语言中,有多种数据类型,这些类型都定义在通用类型系统(common type system)中,所有的类型也都继承自system.object,所以每一种类型也都是对象。它们根据在内存中存放的方式,分为实质类型和参考类型两种。
当内存中的值发生改变时,参考类型也跟着改变。
下面是数据类型的组织结构图:
整数数据类型
在C#中有8种整数数据类型可以使用:
例:int jzh=0;
布尔数据类型
布尔类型的数据只有两种值:true或false,而且不能转化为其它类型的数据。例:bool jzh=true;
字符数据类型
char实际上用来表示16位的Unicode的字符。例:
char jzh = 'X'; // Character literal
char jzh = '\x0058'; // Hexadecimal
char jzh = (char)88;
char jzh = '\u0058'; // Unicode
- 浮点数据类型
float: The float keyword denotes a simple type that stores 32-bit floating-point values。32位浮点数。
Double: The double keyword denotes a simple type that stores 64-bit floating-point values.64浮点数。 - 参考数据类型:
参考数据类型的变量中存放的不是实际的变量值而是一个参考值,这个参考值指向真正数据所在的地址。这些数据可能是对象、字符串或者是数组。
关于object我想这是一个很重要的概念,在微软的.net世界里体现的就是一个everything is object的思想。也就是说.net环境中,任何都可以成为对象,如下:object jzh=1;
任何数据类型都是从system.object继承来的,也就是说任何数据类型的值都可以设置给object。
字符串是一个很熟悉的概念。但是你知道吗,字符串也可以被看做数组来处理,例:
string jzh="I am jzh";
char jzh2=jzh(0);
那么jzh2='1'
数组也是程序设计中常常提到的,它的优势是你可以储存一个以上的变量。但是这些变量的数据类型都要一样才行。例:int[] intarray=new int[217];
二、 C#程序
C#里常用的一些程式基本上和C++差不太多,和VB也只是形式上变更了一下。我不准备说太多,重点就C#在ASP.NET中的应用提供了点说明。更多的内容你完全可以查阅Microsoft自带的sdk。
在ASP.NET中使用C#,和我们在ASP中使用vbscript以及jscript是一样的。只是将其改为C#罢了。当然它必须撰写在<script>
内,例:
<script language="C#" runat="server">
//程序内容
</script>
note:和VB与C#的大小写一样,在C#中的变量是要提前声明的,这一点用惯vbscript的程序员一定要注意。
If 判断式
这是一个几乎在任何语言中都会出现的东西,相当于我们国内的如果…那么…。这种句子在second grade的小学生就被teacher要求用来造句,当然你千万别告诉我你没上过二年级。它在VB中的表现是if …then…end if
这样的形式。它在sdk中是这样的:
if (expression)
statement1
[else
statement2]
在C#语法中,if判断式的语法如下:
if (bool 条件式)
{
//处理的程序
}
else
{
//处理的程序
}
这是一个在microsoft的sdk中给出的例子:
// if-else example
using System;
public class IfTest
{
public static void Main()
{
Console.Write("Enter a character: ");
char c = (char) Console.Read();
if (Char.IsLetter(c))
if (Char.IsLower(c))
Console.WriteLine("The character is lowercase.");
else
Console.WriteLine("The character is uppercase.");
else
Console.WriteLine("The character is not an alphabetic character.");
}
}
下面是我给你的一个例子:
<html>
<head>
<script language="c#" runat="server">
void page_load(Object sender, EventArgs e){ //void表示该函数没有返回值
if (DateTime.Now.Hour<12){ //if后括号内数值必须为bool值
jzh.Text="上午好";
}else if(DateTime.Now.Hour>=12 && DateTime.Now.Hour<22){ //&&的用法详见教程
jzh.Text="下午好";
}else{
jzh.Text="该睡觉了";
}
}
</script>
</head>
<body>
<form runat="server">
<asp:label id="jzh" runat="server"/>
</form>
</body>
</html>
详例请见例程中的if.aspx文件。
我们在上面的例程中看到这样的语句:
if(DateTime.Now.Hour>=12 && DateTime.Now.Hour<22)
&&
是在C#中的逻辑运算符,它表示and的意思。在C#中,if语句是用来判断的,也就是说判断的语句一定是判断式,而非表达式。如if(jzh=5)是C#中是错误的。我将这些比较运算符及逻辑运算符整理如下表:
switch判断式
在if语句中你看到了遇到多种判断情况时所使用的else if语句,它确实不错,但是当你要判断的条件越来越多时,它的书写就太麻烦了,为此,microsoft又定义了另一个条件判断式switch,用于程序中的条件式有多个选项,而根据这些不同的输出选项做出不同的处理。
Microsoft在sdk中的说明如下:
switch (expression)
{
case constant-expression:
statement
jump-statement
[default: statement]
}
我的说明如下;
switch(条件式)
{
case 值1:处理程序;[goto case 欲跳转到的某语句];
case 值2: 处理程序;
…
default: 默认的处理程序;
}
微软给你的例子如下:
using System;
using System.IO;
class SwitchTest
{
public static void Main()
{
Console.WriteLine("Coffee sizes: 1=Small 2=Medium3=Large");
Console.Write("Please enter your selection: ");
string s = Console.ReadLine();
int n = int.Parse(s);
switch(n)
{
case 0:
goto case 1;
case 1:
Console.WriteLine("You selected small size. Insert 50 cents.");
break;
case 2:
Console.WriteLine("You selected medium size. Insert 75 cents.");
break;
case 3:
Console.WriteLine("You selected large size. Insert $1.00.");
break;
default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
}
Console.WriteLine("Thank you for your business.");
}
}
我给你的程序如下:(见switch.aspx)
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, EventArgs e)
{
string strname="姜志辉";
switch (strname)
{
case "李忠琪":jzh.Text="才子一号";break;
case "彭海河":jzh.Text="才子二号";break;
case "姜志辉":jzh.Text="才子三号";goto case "杨起荣";
case "杨起荣":jzh.Text="才子四号";goto default;
default:jzh.Text="四大才子";
//最后的显示结果应该为四大才子,因为strname的值为姜志辉。
//那么case "姜志辉"被执行,jzh.Text="才子三号"被执行,
//紧接着又被转向到case "杨起荣",jzh.Text="才子四号"被执行
//然后又转向到default,因为后再也没有goto语句,所以end
}
}
</script>
</head>
<body>
<asp:label id="jzh" runat="server"/>
</body>
</html>
如果想把这个执行顺序说明的更加清楚,应该改动一下这个程序,我更改后的结果为switch2.aspx。
for循环
不少的程序设计类书籍都会告诉你for循环是已经知道执行的次数或者执行范围的时候所采用的循环语句。
微软给你的说明如下:for ([initializers]; [expression]; [iterators]) statement
翻译成中文大概如下:for (起始值;条件式;累加数值){处理程序}
详见实例for.aspx:
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, EventArgs e){
int j=0;
for (int i=1;i<=10;i++){
j+=i;
}
jzh.Text=j.ToString();
}
</script>
</head>
<body>
<asp:label id="jzh" runat="server"/>
</body>
</html>
while循环
for循环是用来知道要执行多少次循环的情况下使用的,而如果不知道要知道循环多少次,我们希望它能不断的产生循环,直到达到一定的条件时循环终止,这种情况下我们采用while循环。
While循环分为while循环和do…while循环两种。
While循环的语法如下:While(条件式){处理的程序}
Do…while的语法如下:Do { 处理的程序 } while(条件式)
它与while循环的明显区别在于无论是否满足条件至少执行一次处理程序。实例见while.aspx:
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender, EventArgs e){
int i=0;
int j=0;
while(i<10){
i+=1;
j+=i;
}
jzh.Text=j.ToString();
}
</script>
</head>
<body>
<asp:label id="jzh" runat="server"/>
</body>
</html>
foreach循环
在C#中吸取了一个在VB集合中应用的循环语句,foreach。它是将集合中的每一个项目(item)代入变量中进行处理。当然变量也是根据集合项目的类型进行声明的。其语法如下:
foreach(对象类型 变量 in 集合){处理程序}
实例详见foreach.aspx:
<html>
<head>
<script language="c#" runat="server">
void page_load(object sender,EventArgs e){
string strjzh="";
foreach(ListItem stritem in jzh.Items){
strjzh=strjzh + "$" + stritem.Text;
}
jzh1.Text=strjzh;
}
</script>
</head>
<body>
<asp:listbox id="jzh" runat="server">
<asp:listitem value="1">李忠琪</asp:listitem>
<asp:listitem value="2">彭海河</asp:listitem>
<asp:listitem value="3">姜志辉</asp:listitem>
<asp:listitem value="4">杨起荣</asp:listitem>
</asp:listbox><p><p>
<asp:label id="jzh1" runat="server"/>
</body>
</html>