Q:今天我的侄子问我1+1等于多少,我说当然是2咯,他很狡猾的笑着说我错了,然后我问他为什么错,他瞄了我一眼说:“根本无法确定一个唯一的答案,在数学上你可以很确定的说是2,不过我并没有限定范围哟!”那一瞬间我想个傻子被他嘲弄了一番。
A:哈哈。看来你的侄子的确聪明过人。没错,没有限定范围,我们当然无法给出一个确定的答案,这也跟我们今天的话题——类型和类型系统有关。
Q:不会吧?跟我们的C#话题有关??怎么个有关法?
A:嗯,这样吧,我问你,要使得1+1的结果有效,我们至少要为这两个“1”限定一些什么条件?
Q:他们应该具有可加性。
A:在具体一点!
Q:嗯,他们应该是同一类别的。
A:对!非常对!就是同一类别,我们总不能要求一个苹果加上一台风扇会有满意的唯一的结果吧!同样的道理,我们要使得相关的式子在电脑上有效,至少我们要限定每一个被操作的因子都是可以归为某一个类别的。这就导出了类型(Type)。
Q:那么,这个跟C#的类型有什么联系呢?
A:这样吧,我们不说1+1了,我们说说你老婆每个月的家庭财政管理工作。我敢肯定,你老婆不会愚蠢到把数字跟物品混在一起计算收支的情况,她肯定会把相关的物品先进性换算,而实际上,我们每个人在处理财务工作的时候,都统一使用以货币为单位的数字,对吗?假如你这个月收入10000元,支出5000元,那么你可以很快地得出结论,你们这个月有5000元可以存入银行。但这等事怎么在电脑里,我的意思是在C#里面表达呢?电脑没有我们那么聪明,知道10000-5000=5000,因为它不能够从这个简单的式子里面知道这些数字是什么类型的。于是,我们就要首先告诉他这些数字的类型!
Q:那么,我们怎么告诉C#这些额外的信息呢?
A:这个很简单,我们计算的时候有小数的吧,在电脑里面叫做浮点数,我们只要告诉电脑,这些是浮点数,再告诉他这条式子,它就会给出结果我们的了。别的不说,我们先来看看代码:
double inComing = 10000.00;
double outGoing = 5000.00;
double result = inComing - outGoing;
然后你得到的result就是算出的结果:5000了。
Q:这些inComing、outGoing、result等,是什么来的?double又是什么来的?
A:首先,double是指双精度浮点数,你目前知道它是一种精度高的浮点数就行了,与它对应的是精度低的单精度浮点数float。而inComing、outGoing、result这三个东西是变量(Variable)。变量是用来储存信息的,以便我们后面的操作使用的。上面的代码就等于先告诉电脑:我这个月的收入是10000元,支出是5000元,我现在要你给我计算出我这个月剩下多少钱。
Q:噢,我明白了。那么,上面的代码可以运行吗?
A:还不行,因为这个仅仅是一个代码片断,不过要运行的话,我们只需要把这个片断跟之前的HelloWorld结合一下就行了,结合后的代码是:
class PrintResult
{
static void Main()
{
double inComing = 10000.00;
double outGoing = 5000.00;
double result = inComing - outGoing;
System.Console.WriteLine(result);
}
}
还记得System.Console.WriteLine(...);这句话吗,它的作用就是用来向命令行界面输出东西的,这次我们不输出Hello, World! 而改为输出result。现在,你把这个代码保存为PrintResult.cs,然后去到命令行提示符,转到PrintResult.cs所在目录键入csc PrintResult.cs进行编译,最后键入PrintResult运行一下!
Q:好,我明白了,不过我有一个问题想问问,为什么HelloWorld程序和我老婆的财务工作加起来?他们同一类型的吗?:)
A:-_- ...