2012年12月23日 星期日

小山的 C# 教學-第3課-程式結構與進入點

本課簡介

這課主要介紹上一課所寫的 HelloWorld 程式碼架構
以及 C# 的 Entry Point(程式進入點)

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!


重點提示

1. 我們可以大致將 C# 程式碼分成兩塊,一塊是含有 using 的區塊,一塊是程式碼的主要部分
    (1) using 部分主要是在呼叫內建的程式庫
    (2) 主要區塊就是我們編寫程式邏輯的地方

2. C# 裡面,用大括號包起來的程式碼算是一個「區塊」。這個區塊屬於括號上面的程式碼所有。

3. Hello World 的這個程式由裡到外分成三層,namespace、class、method

4. namespace 可以想成是自己的程式庫,所以在 namespace 內寫程式碼就是在編寫自己的程式庫

5. class 一般負責 namespace 裡面一部分的工作

6. method 是在 class 下,負責更細部事務的東西。它有一個明顯的特徵,通常 method 後面都會跟著一個小括號,像是:void Example(int num)

7. static void main(string[] args) 是特別的 method,所有的 C# 程式都會從這個 method 開始執行。 一般稱之為「進入點(Entry Point)」

8. Console.WriteLine 跟 Console.ReadKey 也都是 method。前者會在黑色視窗上顯示文字,後者會等待使用者輸入任意字元

9. 每一行程式碼都必須要加上「;」(分號),代表一行的結束

補充

using System

大家可以看到程式裡面出現了 Console.WriteLine 以及其他 method。那這些 method 到底都寫在哪裡呢?事實上,就是寫在那些名為「System」的程式庫裡。那些程式庫包含了大量可以讓我們寫 C# 更方便的程式碼,以及我們之後會用到的「視窗」也都是寫在名為「System.Windows.Forms」的程式庫內。想要使用這些程式庫,就必須要在程式碼上面打上「using {程式庫名稱}」才行。不過剛開始不太需要注意,因為你的 IDE 都會自動地幫你打理好這些問題。

Console

寫過 C\C++ 程式的人,我想大多數顯示出來的結果都是出現在這個黑色的視窗上對吧?其實我們現在所看到這些視窗、按鈕甚麼的,背後都是由大量的程式碼所建立出來的。而且事實上,這些圖形的畫面是非常耗費資源。早期的程式設計師寫程式,都是在我們看到那個黑底白字的畫面上跑的。而 Console 就是 Windows 下的黑底白字介面。大家可以在「附屬應用程式」>「命令提示字元」那邊開啟 Console 的畫面。

Entry Point

每個程式都會有個獨一無二的「進入點」,也就是作為電腦一開始執行的 method。C\C++ 一般是使用「int main(void)」,win32 的程式是使用「int WINAPI WinMain(...)」,而 C# 就是這個「static void main(string[] args)」。基本上,這個名稱是規定好的,所以不可以隨便更改。如果改成別的名字,電腦就會不知道該從哪裡開始執行。

練習

1. 試著讓程式顯示多行的文字
例如:

C# 真好玩
而且我會寫第一個程式了
這是第三行的說

2. 接上一題,試著讓程式顯示一行停頓一次。每次停頓時,必須要按下鍵盤按鍵才會繼續。

3. 根據「相關資訊連結」的「Console 可以使用的 method 清單」,查查看還有甚麼其他 method 可以使用。例如:讓電腦發出 Beep 的一聲。


參考解答:https://github.com/slmt-tutorial-channel/c-sharp-solutions/blob/master/class_1_10/class3.md


相關資訊連結

System 程式庫裡面包含的 Class 清單

http://msdn.microsoft.com/zh-tw/library/system%28v=vs.80%29.aspx

Console 可以使用的 method 清單

http://msdn.microsoft.com/zh-tw/library/system.console_methods%28v=vs.80%29.aspx

10 則留言:

  1. 不好意思我想問一個很笨的問題
    您第二題出按個按鈕才會繼續,我用了Console.ReadLine()在每段話間放一次成功達到目的,但是我的疑問是為什麼用Console.Read()沒法達到同樣的效果,測試時第二段和第三段話會同時顯示

    回覆刪除
    回覆
    1. 這邊要特別注意的是,電腦之中在輸入字元,按下 enter 之後
      其實是將你輸入的字串暫存在系統的一塊記憶體空間之中,俗稱緩衝區 (buffer)
      當你呼叫 Console.Read() 時,它其實是從緩衝區之中讀取一個字元
      這個時候就要看你緩衝區之內,是否有之前已經輸入過的字
      如果有的話,就會依序先讀取之前輸入過的字

      Console.Read() 會回傳一個字元,你可以把它印出來看看是甚麼
      如果你印出來沒有東西的話,可以試著改用 int 變數存起來再印印看

      刪除
  2. 感謝你的課程,對我幫助很大,謝謝你

    回覆刪除
  3. 最近開始看你的影片和借書自學,講的簡單很好懂,還有部落格講解更仔細和分享相關網站,謝謝你的用心。

    回覆刪除
  4. 最近開始看你的影片和借書自學,講的簡單很好懂,還有部落格講解更仔細和分享相關網站,謝謝你的用心。

    回覆刪除
  5. 感謝你的影片給我很大的幫助!
    我想問一下我想讓電腦持續bbbb是用這個嗎?
    Console.Beep(int32 ,int32),
    不知道怎麼設定參數frequency和duration
    他給的範例我看不懂
    謝謝

    回覆刪除
  6. 我一直在想,程式語言這部分未來的條件好嗎?到底適不適合走這條路?還煩請大師回答

    回覆刪除