Csharp+Asp.net系列教程(二)

迈克老猫
来自:老猫的理想

本教程参考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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值