C# 程式語言
導師時間
- 請同學注意上課、點名時間8:20,逾時會記曠課
- 班長提供請假名單
- 課表更動請查閱共用
- 第52屆全國技能競賽中區分區技能競賽
- 課務用電腦不得私自安裝非授權軟體
- 建議購買SSD/256G外接硬碟
專題注意事項
- 需部署至課務伺服器
- 1-3人
環境建置
- 7-ZIP
- notepad++
- fastcopy
- git
- 路徑C:\Git
- 取消勾選 Windows Explorer integration
- 編輯器選擇 nano
- Cmder
- nvm
- 路徑C:\nvm、C:\nvm\nodes
- XAMPP
- composer
- develop mode要勾選
Git
基本設定
- 調整 options
- 初次設定 Git
- username
- email
- default editor
終端機設定
- 命令提示字元中可以設定>進階,以管理員身份執行就不用每一次都按
Cmder
- 控制台>系統>進階系統設定>環境變數>path
- 新增 cmder 路徑 C:\cmder
node設定
SAMPP設定
-
設定環境變數
- D:\xampp\php
- D:\xampp\mysql\bin
-
設定檔
-
確認是否設定完成


composer
Composer是PHP的軟體包管理系統
指定composer根位置
- 新增系統變數
- 變數名稱:COMPOSER_HOME
- 變數值:c:\composer
- 設定環境變數
- path 增加 c:\composer\vendor\bin
Visual Studio 2019 簡介
基本完整的開發工具集,它包括了整個軟體生命週期中所需要的大部分工具,如UML工具、程式碼管控工具、整合開發環境(IDE)等等。
- 如需新增套件,可至控制台>程式集>變更
- ASP.NET
- AZURE
- .NET 桌面開發
- 通用 Windows 平台開發
- VS 擴充功能開發
延伸
環境變數
如果沒有把軟體本身「可執行檔的路徑」設定在 PATH 環境變數中的話,則每次執行該命令必須使用以下兩種方式:
- 到該程式所在的執行檔目錄底下執行
- 輸入執行檔的完整路徑
例如:command not found 就是路徑沒設定好
zsh command not found
SAMPP
允許使用者可以在自己的電腦上輕易的建立網頁伺服器。
XAMPP的名稱來自以下組合:
X(支援跨平台)
Apache
MySQL或MariaDB
PHP
Perl
PHP
- scripting language
- server-side language
- creating dynamic web pages
Node.js
Node.js 是能夠在伺服器端運行 JavaScript 的開放原始碼、跨平台執行環境。
JavaScript 通常作為使用者端程式設計語言使用,以JavaScript 寫出的程式常在使用者的瀏覽器上執行。Node.js 的出現使 JavaScript 也能用於伺服器端編程。
- nvm:node version management
C# 程式架構
C# 開發應用
- window from
- 控制台
- web (ASP.NET, MVC) –> 另一門課
主要架構
- 入口函數:
Main()
- 預設類別名稱 class:
Program.cs
- 命名空間通常放最外層:
namespace
,幫助不同命名空間中有相同函數時可用來分類,類似於資料夾

註解
Main()

- static 靜態:讓程式在執行時,先在記憶體佔位置
- 程式執行三階段
- coding 編輯
- compile 編譯
- linking 連結:將函式庫、外部程式作連結
- build 成執行檔,一般存於 bin/debug 或 bin/Release 資料夾中
void
當方法沒有回傳值時
Read()
資料型別
強型別
要定義資料類型,偏向不容忍隱性的型別轉換。例如:java
、C#
弱型別
即便先定義的型別,也可以很直觀的轉換,例如:php
常見資料型別

常數、變數
- 常數
const
:宣告初始值後,內容不可改變
- 變數
var
:內容會改變
public
命名規則
- 大小寫有分
- 英文、底線開頭
- 有意義
- 少用中文
- 保留字或關鍵字
函式參數引用原則
Call By Value, Call By Reference?
記憶體中紀錄的是位置(Reference)還是實質型別(Value)?
實值型別與參考型別
實值型別傳遞給其他人時是複製實值傳遞,參考型別傳遞給其他人時是複製地址傳遞。
實值似影印傳遞,會複製成兩份一模一樣的物件,參考傳遞似網址傳遞,會複製網址分享對方,兩人共同觀看網站同一個物件。
From 實值型別與參考型別
運算子、運算元
運算元
- 單元運算子,例如:
i++
- 二元運算子,例如:
i+j
- 三元運算子,例如:
max=(a>b)?a:b
運算子
- 算術運算子,例如:
+
、-
、*
、/
、%
- 關係運算子,例如:
==
、!=
、>
、<
、>=
、<=
- 邏輯運算子,例如:
&&
、||
、!
、XOR
- 位元運算子
- 位移運算子,例如:
>>
右移(/2)、<<
左移(*2)
- 複合指定運算子,例如:
+=
、-=
等等
優先層級

String
字串相連
字串格式化
字串插值
建立方案
- 方案(.sln)
- 專案1(.csproj)
- 專案2(.csproj)
- …
- 如果沒有載入 System 函式庫,console 需要指名從 System 函式庫

Debug
設定中斷點

補充:進制轉換
二進制 Binary, bin

八進制 Octal, oct
十進制 Decimal, dec

十六進制 Hexadecimal, hex
- 基數 16,逢 16 進位
- 10(A)、11(B)、12(C)、13(D)、14(E)、15(F)
最高有效位元 MSB:最左邊
最低有效位元 LSB:最右邊
- 老師:戴德仁
- 時間:2022/4/1、4/7
- 配合投影片02,版權問題不放
console 類別常用方法
White
WhiteLine
Read
ReadLine
練習題

格式化輸出
從 Write
、WriteLine
著手
string
index
索引值
,alignment
對齊
- 為正數往右對齊,為負數則往左
- 數字大小決定欄位寬度
- 為0則維持字串原先長度
:formatChar
格式化字元
- C[n]:貨幣[小數點後幾位],預設取小數點後兩位


實戰
數值(int, float)
從ToString
著手


預告:隨堂小考
跳脫字元
\n
:newline
\r
:return
\t
:tab
@"C:\cs\hw1.cs"
- 前綴
@
會讓後面字串全部以一般字元輸出,但如果有""
仍需使用跳脫字元\"
型別轉換
隱性轉換


明確轉換(強制轉換)
- 利用型態轉換(Type cast)方式強制轉換
- 容易有資料遺失,將8byte轉成4byte會有4btye遺失

移位運算元
左移<<
數學意義:
在數字沒有溢出的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。
右移>>
數學意義:
右移一位相當於除2,右移n位相當於除以2的n次方。
XOR(^
)
兩個條件中有一個條件不成立時,就等於條件成立了
運算(隱性轉換)
- 先將9(ASCII)轉成57(十進位)再轉成111001(二進位)
- 將key值11(十進位)轉成1011(二進位)
- 111001與1011做XOR
- 111001
- 001011
- -–––
- 110010
- 得到110010(二進位)再轉成2(ASCII)

output
列舉資料型別
enum
結構
struct
C# workflow
- 老師:戴德仁
- 時間:2022/4/7
- 配合投影片03,版權問題不放
- 預計4/8考試
結構化程式設計
- 循序
- 選擇性
- if/else
- switch
- 重複性
- for
- while
if/else
else if
switch
其中case
輸出內容若相同亦可精簡為:
選擇困難:用if/else
還是switch
?
- 當分支較多時,當時用switch的效率是很高的。因為switch是隨機訪問的,就是確定了選擇值之後直接跳轉到那個特定的分支
但是if/else是遍歷所以得可能值,知道找到符合條件的分支。
如此看來,switch的效率確實比ifelse要高的多。
- 由彙編程式碼可知道,switch佔用較多的程式碼空間,因為它要生成跳錶,特別是當case常量分佈範圍很大但實際有效值又比較少的情況,switch的空間利用率將變得很低。
- switch只能處理case為常量的情況,對非常量的情況是無能為力的。例如 if (a > 1 && a < 100),是無法使用switch來處理的。
所以,switch只能是在常量選擇分支時比if/else效率高,但是if/else能應用於更多的場合,if/else比較靈活。
三元運算子
for
- 全域變數:變數存活於程式碼執行到結束
- 區域變數:變數僅存活於特定區塊內
- 例如
for(int i = 0; i <= 9; i++)
中的i
while
do…while
break
終止程式,例如:印出1~10但3之後不要印
continue
結束當下的迴圈,例如:印出1~10但不要印出3
防呆
限定輸入數字,使用者輸入英文怎麼辦?
C#內建
實際應用
try/catch
- 時間:2022/4/18 下午
- 老師:洪福成(代課)
C# 練習題
2022/5/24 移至C# 練習題