這不是草稿
辛巴學院:正大光明的不務正業。
辛巴學院:攻城獅與榮耀石。
劍英陪你係列又來啦。劍英是一個有大愛的人,熱愛每一個程式設計師,尤其是年輕漂亮的女程式。
最近組織朋友們玩了一次即興團體詩創作,無論怎麼開頭,都會走上廁所文化的道路。
尤其是衛生紙的出鏡率極高。
這讓我對這個群體的心理健康有了深深的擔憂,任重而道遠啊。
讓我們一起響應暴走九月不擼,不擼不擼,九月我不擼。
從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。
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 檔案,這個你肯定熟悉。
但是微軟分開了語言和位元組碼執行時類庫,也帶來了一個優點。可以建立多種可以混用類庫的語言。
後來微軟將c#、msil、dotnet 標準都提交給了國際標準化組織,也就是他作為一個國際標準,誰都可以遵守。
有一個很愛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
下一次再見。
哈庫拉瑪塔塔。