作者:李剑英
剑英陪你系列又来啦。剑英是一个有大爱的人,热爱每一个程序员,尤其是年轻漂亮的女程序。
最近组织朋友们玩了一次即兴团体诗创作,无论怎么开头,都会走上厕所文化的道路。
尤其是卫生纸的出镜率极高。
这让我对这个群体的心理健康有了深深的担忧,任重而道远啊。
让我们一起响应暴走九月不撸,不撸不撸,九月我不撸。
最近组织朋友们玩了一次即兴团体诗创作,无论怎么开头,都会走上厕所文化的道路。
尤其是卫生纸的出镜率极高。
这让我对这个群体的心理健康有了深深的担忧,任重而道远啊。
让我们一起响应暴走九月不撸,不撸不撸,九月我不撸。
从Helloworld开始
你可能已经看过了无数的Helloworld,是什么感觉呢?
兴奋,失望,满足?
还是已经想不起来什么感觉了?
我已经想不起来了,我是一只好了伤疤忘了痛的动物,我入门的那个时间过去很久了,我已经忘记了那时的很多细节。
于是我决定从头来做这个系列,和你一起,再从头,收拾旧山河。也重拾那一份一无所知的心态。
兴奋,失望,满足?
还是已经想不起来什么感觉了?
我已经想不起来了,我是一只好了伤疤忘了痛的动物,我入门的那个时间过去很久了,我已经忘记了那时的很多细节。
于是我决定从头来做这个系列,和你一起,再从头,收拾旧山河。也重拾那一份一无所知的心态。
如果你在阅读过程中发现很多不明白的名词,没关系,不影响理解。
强迫症患者请自行百度。
发现味同嚼蜡,请不要客气,你骂过来我会骂回去,但我会修改。
什么是C#
C#?什么鬼名字?what the fuck?
这得往前一点说起。那时候除了微软,还有一个强大的开发工具商borland。
他俩掐的死去活来,结果微软挖走了delphi他爹安德斯·海尔斯伯格。
当然borland的衰落也不仅仅是因为痛失此位大神,反正他在borland当时也没事做。
微软倒是挖到了宝,当时微软主要的开发工具是Visual 系列,主力产品visual c++,visual basic,visual foxpro。
至于现在大家熟知的 visual studio,就是 visual系列的打包促销。
彼时业界产生了一个震动全球的破坏性的产品,java。是的,java就是这么NB。
于是安德斯来微软第一件事就是抄个java,然后就有了visual j++。
后果可想而知,官司打输了,j++不能卖。
然后盖子和安德斯在一起憋啊,想啊,这不行,这是潮流,还得抄,但是得避开和java的相似性。
于是就搞出了dotnet。把语言和字节码拆成相互独立的部分。
至于那个语言,由于有j++的历史,又有c++的特点。于是有个说法,最终叫做 c++++,四个+凑成了一个#。
而c#的发音 是 c sharp,中文翻译"犀利c"。
这下你知道了,C#就是犀利C。
这得往前一点说起。那时候除了微软,还有一个强大的开发工具商borland。
他俩掐的死去活来,结果微软挖走了delphi他爹安德斯·海尔斯伯格。
当然borland的衰落也不仅仅是因为痛失此位大神,反正他在borland当时也没事做。
微软倒是挖到了宝,当时微软主要的开发工具是Visual 系列,主力产品visual c++,visual basic,visual foxpro。
至于现在大家熟知的 visual studio,就是 visual系列的打包促销。
彼时业界产生了一个震动全球的破坏性的产品,java。是的,java就是这么NB。
于是安德斯来微软第一件事就是抄个java,然后就有了visual j++。
后果可想而知,官司打输了,j++不能卖。
然后盖子和安德斯在一起憋啊,想啊,这不行,这是潮流,还得抄,但是得避开和java的相似性。
于是就搞出了dotnet。把语言和字节码拆成相互独立的部分。
至于那个语言,由于有j++的历史,又有c++的特点。于是有个说法,最终叫做 c++++,四个+凑成了一个#。
而c#的发音 是 c sharp,中文翻译"犀利c"。
这下你知道了,C#就是犀利C。
C#与我有什么关系
注意,这是一段解释Unity和C#之间关系的文字,看不懂没关系
记住Unity和C#有很大的关系就行了
言归正传,由于Unity采用了Mono作为脚本引擎,而Mono是Dotnet的一个开源实现。dotnet最主要的语言是c#,所以使用Unity时,的最主要的开发语言是C#。
是不是根本无法绕清楚,是的,我也绕不明白。
JAVA语言,JAVA字节码,JAVA运行时,JAVA基本类库,都叫java。
而微软和c#这边有点混乱
C#语言,MSIL字节码,dotnet运行时,dotnet framework。有三种名字。
为什么不弄成和java一样呢?j++一样,太像了违法。
dotnet,有时候也直接用个点 ".net",是c#的运行时,dotnet framework 是 c# 的基本类库。
Msil 就是字节码,存字节码的文件 叫 pe file,就是.dll 文件.exe 文件,这个你肯定熟悉。
但是微软分开了语言和字节码运行时类库,也带来了一个优点。可以建立多种可以混用类库的语言。
Msil 就是字节码,存字节码的文件 叫 pe file,就是.dll 文件.exe 文件,这个你肯定熟悉。
但是微软分开了语言和字节码运行时类库,也带来了一个优点。可以建立多种可以混用类库的语言。
后来微软将c#、msil、dotnet 标准都提交给了国际标准化组织,也就是他作为一个国际标准,谁都可以遵守。
有一个很爱c# ,很爱dotnet的人想要一个liunx可以用的dotnet,微软自己当然守着windows了,标准化以后,这个人搞了mono。
他们还成立一家很屌的公司,叫做xamarin。
有一个很爱c# ,很爱dotnet的人想要一个liunx可以用的dotnet,微软自己当然守着windows了,标准化以后,这个人搞了mono。
他们还成立一家很屌的公司,叫做xamarin。
遵守和dotnet一样的标准,但是实现为可以跨平台执行,这就是mono。
unity跨平台的关键技术,就是这个mono,现在虽然unity自己搞了il2cpp,这个你自己体会吧。
慢慢消化,这个像近亲杂交一样的关系确实不是那么容易理顺的。
要做一个Unity程序攻城狮,C#是你需要学习的。
C#怎么学
注意,这一段是解释为什么你要学unity,我却让你安装一个和unity一毛钱关系都没有的软件。
人生有时就是这么无奈,学这些东西对你直接用Unity摆东西的愿望没任何帮助。
基础就是这样的东西,看起来好像没有什么卵用。
首先c#是微软的亲儿子。微软有c#的集成开发环境,叫visual c#。
现在你要找到独立的visual c# 下载还不容易,因为他们打包促销了,建议你下载一份vs2013,并安装好他。社区版不要钱,旗舰版的序列号也遍地都是。
Visual studio 长这样
如果安装不上vs,请你重装windows
这点很重要,连个软件都装不上,那只能撸自己了。
什么,你用macbook,那关我什么事情?我们就是要用windows 和 visualstudio来做说明,自己想办法解决。
然后我们建立第一个c# 控制台项目,来编写我们的第一个helloworld。
请注意,模板里面选择 Visual C#,项目类型选择控制台应用程序。
为什么要从控制台应用程序开始呢?控制台又是什么
控制台在windows上表示的是以命令行输入输出的方式交互的程序。这个说法太官方,一张图你就懂
嗯,如果你经历过dos年代,这个问题就不用纠结了。
我们从控制台程序开始,因为他最单纯,控制台程序只有一种输入,一种输出。一个入口函数,函数执行完就退出。
用一个简洁的测试环境,我们会看的更清楚
开始摇滚吧
新建好的项目是这样的,在开始说代码之前,让我们先来认识一下VisualStudio的样子。
VS用的是一种流行的界面形式,Dock,贴靠的意思,他的每一个界面部分可以取出来,重新组合,所以你看到的vs有时候不是这样的,不用担心。
每一块称为一个视图,当你不小心关掉了一个视图,从菜单栏的"视图"中可以找到并打开它。
还有一部分视图在"调试"菜单中
接下来你要认识的第一个视图叫做"解决方案资源管理器"
Vs在组织项目的时候,采用两层概念,一个叫做,项目,一个叫做解决方案。
一个项目负责产生一个exe或者dll。
一个解决方案包含若干个项目。
一切操作的起点,都是这个解决方案资源管理器。
在helloworld项目上点右键属性,就是上图中高亮的那里
你可以看到这个内容,程序集名称,就是项目生成的exe或者dll的名字,比如我们把他改成h01.
把生成的数出路径也修改一下,方便我们找到他,这里用相对路径绝对路径都可以。
如无意外,输出视图会如下显示,时刻关注输出视图。
然后我们的exe就产生了,你制造了一个运行程序。
点击它,一闪而过。
因为他会自动用命令行执行,执行完就退出了。
真正的HelloWorld,三行
就是这么快,前面只是随便熟悉一下环境,你的第一个代码,加三行
从解决方案资源管理器中双击program.cs,然后把代码弄成下面这样再生成。
请注意,结尾是分号;不是冒号
请注意,大小写是有区别的,Console 和 console 不一样
请注意,//之后叫做注释,可以随便写,不起作用
代码如图。
等下我们会讲解代码,你先抄上去好了。
重新生成,找到exe,运行。
现在不会一闪而过了,我们的HelloWorld也完成了。
关于调试的话题,我们这里先不讲。
自己试一试吧,写下你想对这个世界说的豪言壮语
然后生成一个EXE并执行它。
下次再见,哈库拉玛塔塔。
哦不,对不起,再见早了,如果你是一个强迫症患者,肯定还希望了解每一个细节,那就接着往下看。
发生了什么
我们写了一个c#程序,可是发生了什么?
你可能过去认为程序员眼中的代码是黑客帝国这样的,并不是
代码看起来的感觉应该是这样的,和小学生的关系图没啥区别。
C系语言首先有个 语句和块的概念。
语句的结束是";",有一些特殊语句用"换行符"结束,这里没涉及这种特殊语句。
块是用{}包裹起来的部分,块根据语法前后还会有关键字。
任何一段C系语言的代码,你首先要用语句和块来看待它。
用语句和块来看待它。用语句和块来看待它。用语句和块来看待它。重要的事情说三遍,此处先不要纠结那些东西背后的语法意义。
你先要从大的层面将它快速拆解为语句和块。
他们是一颗关系树。我们去看那颗树,别盯着叶子不放。
你能用块和语句的区分,画出这颗关系树么?不能也没关系,多写代码,这棵树就会慢慢的清晰出现在你的脑袋里。
这里出现了三种块,三种语句。
请注意,往后的部分就是枯燥与更枯燥,你可以把他们作为一个手册,在你需要的时候再回来看。
NameSpace命名空间
Namespace helloworld 开头的这个块,叫做命名空间,他只关乎名字。
这里我们举个例子,NameSpace只关乎名字
Using 语句块关乎方便的使用名字,我们现在使用"helloworld.conststr.conststrclass.str"去访问,太长了。
Using可以让他更方便
这就是using,using还有一个别名的用法,你有兴趣可以自己了解一下。
Using完全是可选的,可以不用using。但是代码就成了这样子
Class类型定义
Class叫做类型定义语句块,可以简称类定义,根据上下文也可以简称类型或者类。
类是归类,分类的意思,是面向对象编程提出的一种概念,这个我们回头会专门去讲解。
命名空间之下必须是类语句块。类语句块里面可以有成员语句或者成员语句块。
成员分为函数和变量。函数和变量是基本的编程单位。
这里使用了两种class 语句块
一个class
一个 public class
Class 之前的public是修饰符,他表示这个class 公开可被其他模块访问,模块指的是一个dll或者exe。
函数定义
函数定义和namespace 和 class 不同,没有关键字。
函数在c系语言的语法约定如下 :
【修饰符】返回类型 名称 (【参数…】)
Static 是修饰符
Void 是返回类型,void表示不返回
Main 是函数名称
然后后面有个括号,必须有个括号,没参数也要括号,才认为是函数的定义。
Program.Main 是控制台程序约定的入口函数,args是控制台程序输入的指令,这个我们下一节再讲。
而namespace helloworld则是因为这里
函数调用语句
我们学习了两个函数 调用语句Console.WriteLine,Console.ReadLine
下一次再见。
哈库拉玛塔塔。