根据网友们的反馈,在接下来的两周内,IT之家将对C#语言的基础知识进行介绍(每天一个知识点),以便你能够基本读懂项目中的C#代码。但需要说明的是,文章能够容纳的内容是极其有限的,只能提供一个学习的思路,无法涉及到C#语言的方方面面,特别是很多高级主题,你需要借助其他参考书籍来学习和掌握。
计算机程序往往需要处理各种各样的数据,因此每一套编程语言都需要有一套完善的机制来表示这些数据,这些数据可能是一串字符(字符串)、数字等,而数字又包括整数型、浮点型等。在有些编程语言中,定义数据时并不严格区分数据的类型,在程序运行过程中,数据类型可根据实际情况发生变化,这种语言称为弱类型语言,比如PHP、JavaScript这类脚本语言。而C#则是一种强类型语言,它对不同的数据类型都有不同的定义方法。数据类型又分为基本数据类型和自定义数据类型,后者是在前者基础上由用户自定义的一种数据类型,比如我们之前讨论过的类。
基本数据类型
• 整数类型
在C#中共有8种整数类型,分别为sbyte(有符号8位)、byte(无符号8位)、short(有符号16位)、ushort(无符号16位)、int(有符号32位)、uint(无符号32位)、long(有符号64位)、ulong(无符号64位)。
这里的位数是指二进制位数,对于有符号整形,最高位为表示正负的符号位,用n表示数据二进制位数,那么其表示范围为-2^(n-1)~ 2^(n-1)-1,比如32位有符号整型int的表示范围为-2147483648~2147483647。对于无符号整型,表示范围则为0~2^n-1,比如32位无符号整型uint表示范围为0~4294967295。
至于为何表示范围的最大值和最小值绝对值大小不一,这里涉及到原码、反码、补码相关的知识,请大家自行查阅资料进行学习。
• 浮点类型
浮点数用于表示非整数数字,它在计算机中的表示是比较复杂的,这里我们只需要简单知道C#中支持两种浮点数即可,分别为float和double,前者为32位,后者为64位。
除此之外,还有一种特殊的浮点类型,即decimal类型,它用128位进行表示,较适合大而精确的金融类计算。
• 布尔类型
布尔类型数据bool用于表示真假两种状态,分别为true和false,常常用在条件判断中。
• 字符和字符串
字符类型(char)用来表示Unicode字符,而零个或多个字符组成的有限序列则称为字符串(string)。
变量的定义和赋值
有了数据类型我们就可以在程序中定义所需的数据,定义数据的过程称之为变量的声明,变量被声明之后便可对其进行赋值。比如声明一个字符串类型变量,代码如下:
string name;
其中string为数据类型,包括上文介绍过的其他表示数据类型的单词,它们在C#语言中为专用单词,称之为关键字。后面的name则是我们自定义的用于表示一个字符串变量的名称。
声明变量之后就可以对其进行赋值,赋值操作代码如下所示:
name = "DouDou";
类型的分类
C#中的数据类型可分为值类型和引用类型两类,主要根据它们在内存中的存储和复制的方式进行区别。在以上介绍的数据类型中,只有string类型为引用类型。
举个例子,我们定义两个int变量:
int a = 1;
int b = a;
在内存中a和b分别占用不同的内存位置,且更改其中一个变量的值对另一个不会造成影响。值类型变量本身存储数据值。而引用类型则不同,类似地定义两个字符串变量:
string c = "Doudou";
string d = c;
在内存中,c和d虽然是两个字符串变量,但它们都指向内存中同一个位置,实际上a和b两个变量本身存储的是内存中的位置,而不是数据本身,要访问数据需要先从变量中读取内存地址,才后再根据内存地址找到数据内容。
最简单的C#程序及程序编译
下面我们就来看一段最简单的完整的C#程序代码:
class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
在之前的文章中我们已经初步接触了类(class)的概念。C #是一门完全面向对象的编程语言,所有的语句都放在类的内部,以上代码即定义了一个名为HelloWorld的类。与C++程序一样,C#也有入口点函数,即程序开始运行的地方,在以上代码中程序的入口位置就是HelloWorld类中的Main方法,并且这个方法必须为静态(static)方法。静态方法的特点是,不需要对类进行实例化就可以直接被调用执行。在这个最简单的程序中,在Main方法中我们调用System.Console.WriteLine方法在控制台输出了一串字符Hello World!,并且这一串字符占据一整行的位置。
下面我们利用前面已经学到的知识对这个简单的程序进行修改,在控制台中输出字符串变量对应的值,修改后的代码如下:
class HelloWorld
{
static void Main()
{
string a = "Doudou";
string b = a;
System.Console.WriteLine(a);
System.Console.WriteLine(b);
b = "Hi";
System.Console.WriteLine(a);
System.Console.WriteLine(b);
}
}
下面我们就来编译并运行这个程序,首先我们在D盘新建一个文本文档,将以上代码复制到文本文档中,保存并重命名为HelloWorld.cs。然后我们使用微软的Microsoft .NET编译器对程序进行编译。如果你已经安装了Visual Studio,在开始菜单中找到“VS2015开发人员命令提示工具”,打开如下图,依次执行三条命令:
上图三条命令解释:
• 通过cd /d d:\命令可将命令提示符的当前路径定位到D:\
• 通过csc.exe 源代码文件名命令可执行程序的编译
• 编译后的可执行文件名称与源代码文件名称(除后缀名外)一致,并且保存在源代码文件同目录下,因此直接输入HelloWorld.exe即可执行程序。
最后就可以看到程序执行结果:一共输出了四行字符串,前两行分别为a和b初次赋值后所引用字符串的值,最后两行为对b进行重新赋值后a和b分别所引用字符串的值。
也许你会奇怪,既然a和b都是引用类型数据,保存的是数据在内存中的位置,那么对b变量进行修改后,为什么a的值没有跟随变动呢?这是因为在C#中字符串是一种特殊的引用类型数据,字符串在内存中是不可变的。当你改变字符串变量的值时,实际上是在内存中重新创建了一个新的字符串,而变量的值则被重新指向了新的字符串内存位置,因此字符串变量在使用时表现出与值类型数据相似的特性。
数组
最后我们再来了解一下数组。数组是编程语言中必须掌握的知识点,它是一种特殊的变量,也是引用类型数据,用来存储同一种类型的多个数据的集合,比如将多个人的名字存储在同一个变量中。
数组变量的声明格式:先指定数组元素数据类型,后面跟一对方括号,然后是变量名。比如声明一个字符串数组,然后对其进行赋值:
string[] names;
names = new string[]{"aa", "bb", "cc"};
在使用数组中的数据(即访问数组)时通过方括号索引来实现,比如,我们从以上数组中取出第3个数据(数组的索引从0开始,因此第三个数据索引为2),将其复制给一个新的字符串变量,代码如下:
string name = names[2];
本文对C#中的数据类型、最简单的C#程序构成以及程序的编译进行了介绍,最后又认识了一下数组这种特殊的变量。下次IT之家将对C#中的操作符、控制流程语句以及方法进行介绍。在这之前网友们需要针对以上内容广泛查阅相关资料进行加强学习。
IT之家Win10开发入门系列文章:
《IT之家学院:跟我一起学Win10 UWP应用开发(开篇)》
关注Windows10,锁定Win10之家(http://win10.ithome.com)