• C#基本语法(一)


    一、c#基础

    1.控制台基本操作

    Console控制台标准输入、输出流和错误流,此类不能继承;下面的输入、输出都要通过他才能做到。

    1)输出WriteLine是输出一个值并换行,Write是输出一个值不换行;

    如:Console.WriteLine("hello"); Console.Write("hello");

    2)输入ReadLine()读取一行字符,Read()读取下一个字符;如:string s= Console.ReadLine()

    记住:无论你输入的是数字还是字符,他都当成一个字符串来处理;

    如果想输入数字就要转换他的类型:

     string i = Console.ReadLine();输入一个数字字符

                int ii = Convert.ToInt32(i);将数字字符转换为int型,不能将abc……字符转换为int型;

                Console.WriteLine(ii*2);

    3)占位符用大括号表示“{参数}”,占位符从中的参数从0开始,我们后面有几个值就用几个占位符,占位符中的序号也是要跟着的,比如有三个值要输出,那么占位符就应该是:{0}{1}{2}

    例如:

    int i1 = 10;

    int i2 = 21;

    Console.WriteLine("{0}+{1}={2}", i1, i2, i1 + i2); //占位符"{0}+{1}={2}",其中的数字012,顺序不能改变,我们要输出三个参数,也只能按顺序012,不能用014,随便乱用,占位符的顺序是从0开始的。

    Console.WriteLine("{0}{1}",s,c);//还能在占位符之间加任意的字符串。

    注:占位符中间写什么编译器他不管,他只管占位符{},其他的做一个字符串输出。

    4)转义符:用反斜杠(\)作为转义符,@转义符的转义符

    string z = "\"abc\""; //我们想输出(”abc”)不能这样写""abc"";,要用反斜杠将双引号转义告诉编译器第

    二个和第三个双引号是我们要输出的而不是用来“框”字符串的。

    string y = "\\\\\\"; //如果我想输出6个反斜杠,那么这样的话只能输出3个,因为每个反斜杠前面的那个反斜杠会变成一个转义符,

    string x = @"\\\\\jk";  //@来将反斜杠转义,在要输出的字符串前面加上(@)说明字符串里面的反斜杠不是用来做转义用的,而是我们想要输出的。

    注:@只能对反斜杠起作用对其他的符号不起作用。

    5Console.ReadKey();//当按下一个按键时继续执行;如果这里不加上这一句的话,运行控制台程序时就会一闪而过,根本看不到他输出的是什么。

    6)字符串的转换

    Convert.ToInt32(参数);将参数转换为int32型,

    Convert.ToString(参数);将参数转换为字符串;

    Convert.ToBoolean(参数);falsetrue字符串转换为布尔型(既有判断性质,而不是一个简单的字符串)

    7)两个字符串相连

    c#要将两个字符串相连,不用像cc++里面一样需要用函数才能连接,直接用加号即可

    如:string x=”abc”;

    string y=def”

    Console.WriteLine(x+y);结果为abcdef

    2.循环的中断

    1continue结束本次循环;

    continue陷阱:

    int sum=0;

                while (sum<100)

                {

                    if (sum % 7 == 0)

                    {

                        Console.WriteLine(sum);

                        sum++;//这里就是continue的陷阱,因为当sum能被7整除的时候他就跳出本次循环,那么下面的sum就不能自加1,当下一次循环的时候,sum还是上一次能被7整除的那个值,上一次能被7整除,如果这里不自加的话,他将永远被整除下去,这里就陷阱所在。就是说你continue跳过本次循环,那么你要为你跳过本次循环的后果负责,如果后果不要就的话那么你可以不负责,显然这个循环是要求负责的。

                        continue;

                    }

                    sum++;

                }

     

    2break跳出循环,如果循环语句遇到break,那么就不在循环了,直接跳出循环执行循环外面的语句。

    int max = 0;

                while (true)

                {

                    string s = Console.ReadLine();

                    if (s =="end")

                    {

                        Console.WriteLine("最大值为:{0}",max);

                        Console.ReadKey();

                        break;// 直接跳出循环(或者说结束本次循环);                   

                    }

                    int i = Convert.ToInt32(s);

                    if (i > max)

                    {

                        max = i;

                    }

                }

                Console.WriteLine("如果if里面用return,则不会执行到这里来直接返回主函数了");

                Console.ReadKey();

     

    3return返回函数,直接跳出函数。

    static void Retu()

    {

      while (true)

                {

                    string s=Console.ReadLine();

                    if (s == "q")

                        return;// 这个程序中while看上去是个死循环,但是在if这里用了returnreturn是跳出整个函数(这里直接跳出Retu这个函数,不往下执行),如果是跳出主函数,跳出了主函数就以为着程序结束了。

                    else

                    {

                        int i = Convert.ToInt32(s);

                        Console.WriteLine(i*2);

                    }               

                }

    }

    注:1continue;这个的意思是说跳出本次循环,比如这里是执行100次,ifs=10continue;那么当执行到10的时候被跳过不执行然后接着执行11之后面的循环。而如果这里换成break时,当执行到10的时候直接跳出while循环,不执行11后面的语句(但能执行while外面的语句)。

    2break,continue是用来终止循环的,而return是用来返回函数值的,在有return的函数里面,return后面的语句都不能被执行。

    3)对于循环中又有循环,那么break怎么结束,continue又跳出的是哪个循环?答案就是与他跳出他最近的那个,就如同有多个if且只有一个else,那么else与那个匹配呢,当然是与他最近的那个了。

     

    3.类型转换

    将一种类型的值转换为大小相等或更大的另一种类型时,所发生的转换为扩大转换(隐式转换);

    将一种类型的值转换为较小的另一种类型时,所发生的转换为缩小转换(显示转换)

    每种类型都有MaxValueMinValue这两个属性值,用来查看类型的最大值和最小值。

    Console.WriteLine("int的最大值{0},int的最小值{1}",int.MaxValue,int.MinValue);

    Console.WriteLine("byte的最大值{0},byte的最小值{1}", byte.MaxValue, byte.MinValue);

    1)隐式转换

      byte i = 3;

    int j = i;// 小到大,系统自动将我的转换了,不告诉我们,所以叫隐式转换。

    2)显示转换

    byte i;

    int z = 22;

    i = (byte)z;// 从大到小,因为byte不能将int的值装下所以要显示转换(也叫强制转换),

    如果这里z=288因为byte最大值不能超过255,这样的强制转换就会溢出,产生一个不可预知的错误。

    注意:这种转换如果大数据类型的值(如z)在小数据类型所表示的范围(byte表示范围为-255+255)内则不会出现问题,如果大于如果大数据类型的值超出小数据类型所表示的范围(int范围可以达到20亿多,而byte最大值为255,如果将int型数据大于255强制转换为比他小的数据类型如byte型,那么byte型不能将他装下就会溢出,他所打印出来的值就是一个不可预知的值)

    4.枚举和数组

    1)用enum来定义一个枚举

    enum Meiji{bao,wen,wei};//定义一个枚举类型,并且赋值;(和struck联想一下其实也没什么的)

                          //枚举和类这些类型的等级一样,所以不能定义在类里面,也不能定义在里面;                                                       

        class Program

        {

            static void Main(string[] args)

            {

                Meiji m = Meiji.bao;

                Meiji x = Meiji.wei;

                Meiji x1 = Meiji.wen;

    //mxx1被用枚举类型Meiji来定义了,那么mxx1的值就只能等于Meiji里面所有的值,而不能等于其他值。

                Console.WriteLine(m + "" + x + "" + x1);// 不能写成这样(m+x+x1),枚举不能和+运算发在一起,字符串、数值可以,因为字符和int类型可以重新赋值,而枚举的值是固定的。            Console.WriteLine("{0}{1}{2}", m, x, x1);

                 Console.ReadKey();

    注:1)枚举的意义就在于限定了变量的取值范围;如果现在用枚举来类型在定义变量,那么被他所定义的变量只能是枚举里面的值,不能赋其他的值; 如:Meiji y=Meiji.tianxia;这是错误的,因为Meiji里面没有tianxia这个值,所以不能用来赋值给y

    2)当我们知道某些变量的取值范围的时候,将他们“装在”枚举里面会为我们省去很多不必要的麻烦,比如定义的时候超出了我们所要定义的范围。

    2

    Enum能够也能定义类型:

    enum typeName:int

        {

          var1=1,

          var2=2,

          var3=3

        }

        class Program

        {

            static void Main(string[] args)

            {

                typeName i=typeName.var1;

                int j = Convert.ToInt32(i);

                Console.WriteLine(i);

                Console.WriteLine(j);

                Console.ReadKey();

            }

        }

     

    2)数组

    c#中数组是对象,system名称空间的Array类是所有c#数组的基础,由于C#数组是对象,所以必须使用new操作符来实例化;在初次实例化数组时,也需要指明数组能容纳的子项数量(指定数组的长度或者说大小)。

    方法1

    string[] name = { "bao", "wen" };

    int[] shuzu = {1,2,3,4};// C#的定义数组和cc++不一样,用的时候是一样的shuzu[0],c中定义是int shuzu[]={1,2,3};            Console.WriteLine("数组的长度为{0}",shuzu.Length);// Length查看数组的长度;

                for (int i = 0; i < shuzu.Length;i++ )

                {

                    Console.WriteLine(shuzu[i]);

                }

    方法2

    string[] home = new string[3];

                home[0] = "bao";

                home[1] = "tian";

                home[2] = "wen";

                string s = "";//字符串必须先赋值,如果不确定就用“”表示空字符串;            Console.WriteLine(home[0] + home[1] + home[2]);// 将三个字符串相连,如果是枚举就不可以了。            for (int i = 0; i < home.Length - 1; i++)// for中的变量i出来这个for就不起作用了,在for中定义的变量只在for中起作用(这和cC++不一样cc++中是如果出了for只要在同一个函数中他都起作用);

                {

                    s = s + home[i] + "|";

                }

                s = s + home[home.Length - 1];

                Console.WriteLine(s);

    方法3

    //string[] home;

    //home[1]=”bao”; 不能就这样赋值,不同于cc++

    string[] arr;//先定义后实例化;

                arr = new string[5];//必须实例化后才能为他赋值

                arr[0] = "bao";

                foreach (string ar in arr)

                {

                    Console.WriteLine(ar);

                }

    3foreach遍历数组

               string[] names = {"bao","wen","wei"};

                foreach (string name in names)

                {

                    Console.WriteLine("我的名字叫{0}",name);

                }

    注:1)如果int[] i=new int[2];没有为i数组赋值,那么他就默认为两个0i[0]=i[1]=0

    2)如果string[] s=new string[2];没有为s数组赋值,那么他就默认为两个空字符串””(s[0]=s[1]=””)

    3)如果Student[] st=new Student[2];没有为st对象数组赋值,那么他就默认为两个null.

    对象中的null类似于int中的0(从意义上来说,在我们做判断一个数组是否为空时还是要根据类型来说话);

    4)c#中一切皆对象,所以就算是数组也必须先实例化(通过new来实例化)后才能为他赋值;

    4ArryList

    首先,它的大小是随着它所包容的元素的多少而动态变化的

    其次,在ArrayList中可以很方便地把一个元素插入到指定的位置,也可以很轻松地删除一个元素。

    但是,为了能够提供这样大的灵活性,ArrayList的效率与数组相比就要差一些。

             (1) AddArrayList中增加元素。

             (2) Insert:在ArrayList的某个特定位置插入元素。

             (3) Remove删除ArrayList中的某个元素。

             (4) RemoveAt:删除ArrayList中的某个特定位置的元素。

             (5) IndexOf:返回ArrayList中某个元素的索引。

             (6) ReverseArrayList中的元素倒排。

             (7) Sort:将ArrayList中的元素排序。

  • 相关阅读:
    InnoSetup 打包代码 检测.netFramework
    PartialView中的页面重定向
    Cocos2dx 学习之引擎介绍
    30个高质量的免费jquery滑块PSD文件
    HBase Shell
    图灵百年诞辰 1912.6.232012.6.23
    常用的数据分页技术及比较
    Cocos2dx学习之windows 7的visual studo 2010开发环境安装
    C#实现简易ajax调用后台方法
    AJAX(Professional ASP.NET MVC 3
  • 原文地址:https://www.cnblogs.com/wenwei/p/2212351.html
Copyright © 2020-2023  润新知