第 2 講:初識 C# 概念(一)——基礎
今天我們將繼續(xù)學習 C# 這門編程語言里的一些基本概念。我們將圍繞前面的程序代碼為大家作介紹。
當然,如果這么講內(nèi)容的話,可能部分讀者會覺得多少有一些啰嗦。一方面,請見諒;另外一方面,很多人的編程水平是參差不齊的,有些學習得很好的朋友,對編程很熟悉;概念基本上都不用怎么學就可以寫代碼了;而有些朋友可能初學編程,對概念很不熟悉,所以得慢慢來。為了保證盡量多的朋友能夠?qū)W會 C#,所有的內(nèi)容可能會講很細,直到絕大多數(shù)朋友都能接受,因此不要嫌啰嗦。
請注意代碼的第一行。using
在 C# 里是一個關鍵字(Keyword)。所謂的關鍵字,就是在說,“C# 里,我使用這個詞語來表示特殊用途”。
從另外一方面來講,這一行的內(nèi)容必須寫成 using ...;
的形式,其中的 using
單詞不能寫成 use
、used
甚至 user
。關鍵字是永久不變的(不論是單詞本身,還是單詞的變形,都是不變的),而且每一個關鍵字都對應了語法和語義的規(guī)則,且不會變動,因此在學習的時候,只需要掌握每一個關鍵字的如下兩點即可:
這個關鍵字怎么寫;
這個關鍵字的用法到底如何。
就可以了。以后只要看到這樣的寫法,你就可以立即回憶出它的用法是什么,這就是學習關鍵字應該有的感覺。
using
只是其中一個關鍵字)都是全小寫的。只有一個關鍵字比較特殊,它不是一個單詞(寫成一個下劃線:_
),不過這一點我們會在后面的“棄元”文章內(nèi)容里作介紹。
Part 2 引用指令(Using Directive)
下面我們來說明一下,什么是一個引用指令。以 using
起頭的這個形式,我們稱為引用指令。它一般都寫在文件的最開頭。當然,你這么寫也可以:
即寫在 namespace
用大括號包裹起來的里面。兩種寫法基本沒區(qū)別,只是寫在外面可能更好看一點。比如說代碼里的 using System;
就稱為一條引用指令。using
前面說了,它是一個關鍵字,而后面的 System
則不是。這個 System
稱為命名空間using System;
的意思是在說,我需要引入系統(tǒng)自帶的東西到這個項目里來。
在代碼的第 9 行,我們用到了 Console.WriteLine
,它表示“把固定內(nèi)容打到屏幕上顯示”的這么一個功能。計算機里把這個過程叫做輸出(Output)。因為這個功能是我們上手寫代碼就可以用的功能,所以是系統(tǒng)自帶的功能,因此,在使用這句話的時候,你需要在最開頭寫上 using System;
來保證 Console.WriteLine
是系統(tǒng)自帶的過程。
命名空間的架構使用“名稱.名稱.名稱”的方式來表達。你可以回憶一下在學習生物的時候,我們把動植物分成界門綱目科屬種七個層級。這里的命名空間的概念和這個層級關系是類似的:System
是最開頭的級別,也就是最大級別。它包含了很多詳細的子類別,比如說 System.Numerics
(寫 using System.Numerics;
就表示你可以使用系統(tǒng)自帶的數(shù)據(jù)處理的功能)、System.Text
(寫 System.Text;
就表示你可以使用系統(tǒng)自帶的處理文字信息的功能)等等。
命名空間采用的是固定的大寫字母開頭的英文單詞或詞組,在系統(tǒng)里包含了非常多的命名空間可提供你使用。單詞問題來了:既然你說單詞是固定的,但是你剛才說的 Numerics 啊、Text 這些,我完全都不知道,這是從哪里看的呢?命名空間是需要你先提前記住一些的。而最需要記住的就是這里的 System
。其它的其實并不重要,而你只需要先知道 System
就行了。在以后我們講到其它的內(nèi)容的時候,我們會用到別的命名空間的時候才會繼續(xù)作出說明。
總之,命名空間就是用來規(guī)劃項目里所有功能用的,它用來劃分區(qū)分功能。
Part 3 自定義命名空間
請注意 namespace Project
這一行文字。這一行就是在定義命名空間。我們使用大括號來區(qū)分和劃分定義命名空間的范圍。比如這個代碼里,從第 3 行開始到第 9 行結束,都屬于 Project
這個命名空間的范疇。
因為入門我們還用不上 using Project;
類似的、引用自定義命名空間的指令,因此只需要知道一點,命名空間是通過 namespace
這一行文字來規(guī)定的。是的,namespace
也是 C# 里的一個關鍵字。它的功能就是用來定義一個命名空間。這里你記住這么用就可以了,知道它就是一個規(guī)定命名空間的一個意思就可以了。
Part 4 主方法(Main Method)
另外一個 C# 比較重要的概念就是主方法。主方法是整個程序開始運行、跑起來的入口。換句話說,只要我們寫了 private static void Main()
的話,那么就是在說明,“整個程序都從這里開始從上到下依次執(zhí)行功能”。比如這個代碼里:
主方法的頭部(Signature,也叫簽名)的所有可能寫法可以總結成如下的內(nèi)容:
這個寫法你可能需要了解一下。以后我們在說明語法的格式的時候,會廣泛采用這種寫法。下面我們就來說明一下,這個記號的書寫規(guī)則。
Part 5 語法格式的書寫約定
其中,我們把我們要描述的一個語法使用中文名(或者英文單詞)來表示,寫在左上角;然后把它的格式,寫在下面。比如主方法的語法格式就是 訪問修飾符? 'static' 類型 'Main' '(' 參數(shù)? ?')'
。
接著,在這個寫法里用到了“訪問修飾符”、“類型”、“參數(shù)”等使用中文名表達的中間元素。這些元素都可以在下面的內(nèi)容里找到寫法。比如說“訪問修飾符”可以使用 public
或者 private
,選擇其中一個寫法,填入到前面主方法格式的“訪問修飾符”的對應位置上。旁邊帶有的問號 ?
稱為通配符。所有這種描述下的通配符一共有三種:
問號(
?
):表示前面的這個內(nèi)容可以有,也可以沒有。有的話,最多只能有一個;星號(
*
):表示前面的這個內(nèi)容可以有,也可以沒有,而且還不限定出現(xiàn)次數(shù);加號(
+
):表示前面的這個內(nèi)容必須有,且至少有一個;沒有記號:必須有,且只能有一個。
舉個例子?!?/span>訪問修飾符?
”可以寫 public
、private
、甚至不寫出來,但不能寫 private public
或者別的,因為這樣的話,算作出現(xiàn)兩次訪問修飾符了。
然后是單引號的內(nèi)容。單引號里的內(nèi)容是固定不變的內(nèi)容。換句話說,這個語法格式下,這里就必須寫成這個單詞或者詞組,且不能修改大小寫。
那么,主方法的這么長的語法格式就可以被理解成:先寫一個訪問修飾符(private
或 public
,也可以不寫),然后是 static
單詞,然后是類型(void
或 int
里選擇一個),然后是 Main
單詞,然后是開小括號,然后是參數(shù)(可以寫,寫的話必須寫成 string[] args
,也可以不寫),然后是閉小括號。
我們可以利用這個格式,來表述引用指令的語法格式:
其中,“名稱”是隨意的英文單詞,所以沒有固定的書寫格式,因此這里就省略“名稱”的具體書寫格式了。而命名空間定義的格式如下:
其中 '{' 所有可以屬于該命名空間的內(nèi)容 '}'
所以,這個格式,你看明白了嗎?那么,語法格式的約定我們就說到這里。
Part 6 總結
本文我們初步了解了 C# 代碼的基本構造,只有 internal class Program
我們在前面沒有講了。這個叫做類(Class),因為內(nèi)容很繁瑣,所以你當成固定的文本記住就行。到時候我們講到類的時候,會對這個寫法作出詳細說明。
我們了解到,整個程序的大體構造是“引用指令”、“命名空間聲明”、“類”、“主方法”以及執(zhí)行邏輯,是按照順序?qū)懙模@就是我們本節(jié)需要讓大家掌握的內(nèi)容。下一節(jié)我們會繼續(xù)對 Console
等概念作出補充說明。