C#语法相关(一)

关于C sharp语法方面,我只把跟C++语法不一样的知识点总结起来,其它诸如if(判断语句)

或者循环就不说明了,而这些不一样的,大部分都跟类相关.。

C Sharp的代码写在以后缀名cs结尾的文件里,跟C++的cpp文件一样,记住:所有在一个工程里的cs文件,编译器最后都会合成一个大的cs文件。

首先用VS新建一个C#空工程,然后再添加一个类项(名为Class1.cs文件),确定后进入代码编辑区了,这时候会看到Class1.cs里已经有一些代码了,这些代码是编译器自动生成的,我们把这些代码全都删掉,输入下面的代码:

class Program

{

    static void Main()

    {

        System.Console.WriteLine("Hello,World!");

   }

}

Main是主函数,程序的入口点,因为C#是面向对象的,所以主函数得在一个类里面,并且是静态的,而System.Console.WriteLine("Hello,World!");就是在控制台输出“Hello World!”,System是一个命名空间,Console是一个类,WriteLine是Console类的一个静态方法,可以直接调用。

C++命名空间大家都知道,前面也说过了,如果想省去System,就得用using System;也就是使用System命名空间,这样再想使用System里的类,就不需要在前面加System,看下面:

using System;

class Program

{

    static void Main()

    {

        Console.WriteLine("Hello,World!");

    }

}

类型转换

String 是System命名空间里的一个类,专门用于处理字符串的,整型,浮点型,字符,想要转换成String,可以调用ToString方法,还有一个就是类里面静态方法,只能通过类名来调用,这一点不像C++,类名、对象都可以调用.

看下列:

using System;

class Program

{

    static void Main()

    {

        int a = 100;

        float b = 5.23f;

        char c = 'A';

        String str = a.ToString();//调用ToString,相当于类型转换

        //直接用+=连接,也就是字符串可相加连接,如Console.WriteLine("{0}","abc"+"def");

        str += '\n';

      str = String.Concat(str, b.ToString());//调用Concat方法连接字符串

        str += '\n';

        str = String.Concat(str, c.ToString());

        Console.WriteLine("{0}", str);//输出连接后的字符串

    }

}

也许大家会有疑问,为什么用int定义一个变量,这个变量怎么会变成像对象一样可以调用方法(ToString)呢,其实这是编译器转换的原因。大家先用着就是了。

上面是从其它数据类型转换成字符串,那么如果要把字符串转换成其它类型要怎么做呢,比如把字符串“12.53”转换成双精度浮点型12.53要怎么做呢,方法是使用Convert类的方法进行转换,这个类属于System命名空间。

看下面示例代码:

int a = Convert.ToInt32("100");//转换成整型

double b = Convert.ToDouble("12.53");//转换成浮点型 

可以用各类型的Parse方法,如int.Parse("100"); double.Parse("12.53");

数组

数组的定义

int[] arry = { 1, 2, 3, 4, 5 };

数组元素的访问方法跟C++一样,array[0],array[1];

动态定义:

int []arry=new int[5];

动态定义并初始化:

int []arry=new int[5]{1,2,3,4,5};

或:

int []arry;//就像定义了一个指针一样,从某方面来说。

arry=new int[5];

另外arry.Length存储有数组的长度。

二维数组的定义:

int[,] arry = new int[3, 4];//三行四列

        arry[0, 0] = 50;

        arry[0, 1] = 100;

        arry[2, 3] = 500;

定义时初始化:

int[,] arry =newint[2, 3] { { 0, 1, 2 }, { 1, 2, 3 } };

二维数组的元素访问跟C++有些区别,array[0,0],array[0,1];

三维数组的定义:

    int[, ,] arry =newint[2, 3, 4];//多维数组以此类推

        arry[0, 0, 0] = 55;

        arry[1, 2, 3] = 100;

不规则数组的定义(看看跟二维数组有什么区别)

    int [][]arry=newint[3][];

       arry[0]=newint[2]{1,2};

       arry[1] =newint[4] { 1, 2, 3, 4 };

       arry[2] =newint[5] { 1, 2, 3, 4, 5 }; 

上面定义了三个一维数组,arry[0],arry[1],arry[2],它们的长度大小不一,但都属于arry,也就是列数不一样。

那么arry这个不规则数组的所有元素就是,arry[0][0],arry[0][1],

arry[1][0],arry[1][1],arry[1][2],arry[1][3],

arry[2][0],arry[2][1],arry[2][2],arry[2][3],arry[2][4]

foreach循环

c#有一种新型的循环语句,专用于数组,看下例:

int[] arry =new int[] { 0, 1, 2, 3, 4, 5 };

        foreach(int a in arry)

            Console.WriteLine("{0}", a);

arry自然就是数组名了,数组有多大,循环就有几次。每循环一次,就把arry数组一个元素的值赋给定义的变量a,按照顺序。

引用类型参数传递

看下面例子:

using System;

class Program

{

    static void ChgNumber(int Number)

    {

        Number = 500;

    }

    static void Main()

    {

        int Num = 1000;

        ChgNumber(Num);

        Console.WriteLine("{0}", Num);

    }

}

会发现Num的值没有改变,这一点跟C++一样,如果要值改变的话,C++的方法是用引用变量,C#也是用引用变量,只不过两者之间引用变量的定义有些区别,C++是int &Number,而C#则是ref int Number,并且在调用的时候变量前也要加上ref。

如下:

using System;

class Program

{

    static void ChgNumber(ref int Number)

    {

        Number = 500;

    }

    static void Main()

    {

        int Num = 1000;

        ChgNumber(ref Num);

        Console.WriteLine("{0}", Num);

    }

}

另外如果是类对象传递则不会有这个问题,因为C#对象的定义本来就是引用的,需要用new来分配。

数组参数传递

跟C++没什么区别,如下:

using System;

class Program

{

    static void ChgNumber(int[] Number)

    {

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

            Number[i] += 10;

    }

    static void Main()

    {

        int[] Num =new int[5] { 1, 2, 3, 4, 5 };

        ChgNumber(Num);

        for(int i=0;i

           Console.WriteLine("{0}",Num[i]);

    }

}

不过上面的ChgNumber函数,不能这样调用ChgNumber(1,2,3,4,5);事实上C++也不能,但C#新增了这个用法,使用params关键字就可以这样使用。

如下:

using System;

class Program

{

    static void ChgNumber(params int[] Number)

    {

        foreach(int a in Number)

            Console.WriteLine("{0}", a);

    }

    static void Main()

    {

        ChgNumber(1,2,3,4,5);

    }

}

属性的定义,set和get访问函数

 所谓set和get访问函数,我们要搞清楚的是在什么情况下会执行set和get函数,也就是满足什么条件(当变量被读写的时候)。看一下下面的例子就知道了:

using System;

class Apple

{

    public int Number

    {

        set

        {

            Console.WriteLine("Number这个变量被赋值了,赋的值是{0}", value);

        }

        get

        {

            Console.WriteLine("Number这个变量被取值了!");

            return 1000;//返回一个值,让取到的值是1000

        }

    }

}

class Program

{

    static void Main(string[] args)

    {

        Apple apple=new Apple();

        apple.Number = 20;//给Number赋值,执行了set里面的语句

        int Num = apple.Number;//取Number里的值,执行了get里面的语句,Num不会是20,而是get里返回的1000.

        Console.WriteLine("Num的值:{0}", Num);

    }

}

上面注释都已经做了说明,这里提一下value,当属性变量被赋值时,value就存储有这个值,可以在set里面访问。

你可能感兴趣的:(#,c#桌面编程,c#,java,jvm)