本教程参考c#和asp.net程序设计教程撰写,有什么不足之处请大家指出,或在老猫的理想blog留言。
继续上回,数组是我们经常用到的,我来介绍一下:数组是具有相同类型的一组数据。当访问数组中的数据时,可以通过下标来指明。c#中数组元素可以为任何数据类型,数组下标从0开始,即第一个元素对应的下标为0,以后逐个递增。数组可以一维也可多维。
//包含6个元素的一维整数数组;
int[] mf1=new int[6]; //注意初始化数组的范围,或者指定初值;
//包含6个元素的一维整数数组,初值1,2,3,4,5,6
int[] mf2=new int[6]{1,2,3,4,5,6};
//一维字符串数组,如果提供了初始值设定项,则还可以省略 new 运算符
string[] mf3={"c","c++","c#"};
//一维对象数组
object[] mf4 = new object[5] { 26, 27, 28, 29, 30 };
//二维整数数组,初值mf5[0,0]=1,mf5[0,1]=2,mf5[1,0]=3,mf5[1,1]=4
int[,] mf5=new int[,]{{1,2},{3,4}};
//6*6的二维整型数组
int[,] mf6=new mf[6,6];
下面来看一个一维字符串数组的遍历
using system;
public class mikecat
{
static void printarray(string[] arr)
{
//打印数组元素,arr.length 表示数组元素的个数
for(int i=0;i<arr.length;i++)
{
console.writeline("arr[{0}]={1}",i,arr[i]);
}
}
public static void main()
{
string[] arr={"c","c++","c#"};
//将数组作为一个参数传递
printarray(arr);
}
}
程序结果:arr[0]=c arr[1]=c++ arr[2]=c#
下面来看一个4行2列(4*2)的整型数组的遍历:
using system;
public class mikecat
{
static void printarray(int[,] arr)
{
//通过两次for循环遍历二维数组
for(int i=0;i<4;i++)//初始化i作为循环变量,i++实现该变量的自增运算。
//for循环满足条件后执行完循环体一次后执行i++,然后进入下次循环。简单的c语法,这里做简单介绍照顾初学者。(详细可参阅谭浩强先生的c语言程序设计一书)
{
for(int j=0;j<2;j++)
{
console.writeline("arr[{0},{1}]={2}",i,j,arr[i,j]);//打印每个二维数组元素
}
}
}
public static void main()
{
//主函数
//将数组作为一个参数传递
printarray(new int[,]{{1,2},{3,4},{5,6},{7,8}};
}
}
运行结果:arr[0,0]=1 arr[0,1]=2 arr[1,0]=3 arr[1,1]=4 arr[2,0]=5 arr[2,1]=6 arr[3,0]=7 arr[3,1]=8
类是面向对象程序设计的基本构造块,详细我们在后面介绍。这里我们介绍两个特殊的类,即object类和string类
1.object类
object类是预定义类system.object的别名,它是所有其他类型的基类。c#中所有类型都直接或间接从object类中继承。因此,一个object类的变量可以赋予任何类型的值。
int i=30;
object obj1;
obj1=i;
object obj2='a';
2.string类
string类专门用于对字符串的操作,他是预定义类system.string的别名
string str1="mikecat";
可以用"+"号连接两个字符串。
string str2="username:"+"mikecat";
如果访问单个字符,则要用下标。
char c=str1[0];
比较两个字符串是否相等,可用比较操作符"=="//有别于basic语法
bool b=(str1==str2);
c# 中,取消了c和c++中使用最灵活,也是最难掌握的指针。那么在c#中如何提供c/c++中的函数指针的功能?c#提供了委托(delegate),委托是继承自system.delegate类的引用类型。它相当于函数指针原型。与函数指针不同的是,委托在c#中是类型安全的,委托特别适合于匿名调用。要使用委托需经过三个步骤,即声明、实例化、调用。
using system;
//声明一个名为mfdelegate的委托,该委托有一个string类型的参数
//c#编译器编译时会产生一个新类,该类继承自system.delegate,类
//名为mfdelegate
public delegate void mfdelegate(string name);
public class mikecat
{
//定义与mfdelegate有相同参数类型的方法hello()
public static void hello(string name)
{
console.writeline("您好,{0}!",name);
}
//定义与mfdelegate有相同参数类型的方法goodbye()
public static void goodbye(string name)
{
console.writeline("再见,{0}!",name);
}
public static void main()
{
//创建一个mfdelegate实例 mf1
mfdelegate mf1=new mfdelegate(hello);
//调用mf1
mf1("mikecat");
mfdelegate mf2=new mfdelegate(goodbye);
mf2("mikecat");
//将mf1 mf2组合成一个新的委托mf3
mfdelegate mf3=mf1+mf2;
//调用mf3
mf3("迈克老猫");
//从组合的委托mf3中删除mf1
mfdelegate mf4=mf3-mf1;
mf4("mikecat");
}
}
程序结果:您好,mikecat!//mf1; 再见,mikecat!//mf2
您好,迈克老猫! 再见,迈克老猫!//mf3
再见,mikecat!//mf4
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器