关于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里面访问。