本人是一位高校在读大学生,学习编写C#也已经将近一年之久,之所以在写了C#一年之后再来写对C#的学习文章,其中最重要的原因是觉得自己虽然写了一年的C#,但是遇到C#的问题也是百度,博客,交流群走一圈基本解决,自己没有去深入的了解C#这门语言。
学习C#语言的方法很多,C#作为一门高级程序语言,又是一门面向对象的语言,这些特点决定了它的基本语法,而且C#脱胎于Java,又有C/C++的特点,我们也可以触类旁通,这也是为什么Java/c++程序员能非常容易的转到.Net。
那么我们就开始C#的学习吧,首先从C#的类型开始:
1.基本类型:
(1)有符号整型:sbyte、short、int、long
(2)无符号整型:byte、ushort、uint、ulong
(3)字符型:char
(4)浮点型:float、double
(5)高精度小数:decimal
(6)布尔型:bool
2.枚举类型:
enum E{...}
3.结构体类型
struct S{...}
4.空类型 null
5.类
class C{
}
6.接口
interface I{
}
7.数组
(1)一维数组:int[]
(2)二维数组:int[,]
8.委托
delegate int D(...)
其中1~4为值类型,5~8为引用类型;两者的本质区别在于值类型是内存栈来维护的,而引用类型是内存堆维护的。
加粗部分需要注意:
(1)C#的char类型为unicode char,内存中占据2个字节,而不是1个字节;而在c/c++中的char为ascii char,内存中占据1个字节
(2)C#中二维数组应以int[,]方式表示,相信读者中也有用int[][]来存储的,但这并不是二维数组表示方式,int[][]含义为以数组为内容的数组,在初始化时可以看出区别。
int[,] a = new int[10, 10]; //直接初始化为二维数组
// error:public int[][] a=new int[10][10];
int[][] b = new int[10]; //先初始化一维数组
b[0] = new int[10]; //为b[0]初始化一维数组,b[1]-b[9]仍然未初始化
(3)委托是C#中的独有类型,他的作用类似于C++中的函数指针;但与函数指针不同的是,委托不仅可以处理静态函数,也可以处理动态函数。
public class Array
{
delegate int a(int t);
int pow(int t)
{
return t * t;
}
static int add(int t)
{
return t + t;
}
static void Main()
{
Array array = new Array();
a a1 = new a(array.pow);
Console.WriteLine(a1(3));
a a2 = new a(this.add);
Console.WriteLine(a2(3));
}
}