簡介
Visual Studio (簡稱VS), 是一個龐大且精良的程式語言開發套件, 裏面包含Visual Basic, Visual C#(C Sharp), Visual C++, Visual F#, Javascript, Python, SQL Server…….
VS 提供 Enterprise(企業版), Professional(專業版)及 Community(社群版). Community可由微軟網站免費取得。
Visaul Studio版本
Visual Studio 自1997年開始發怖第一版,到現今最新版本為 Visual Studio 2022,中間經歷了 2013、2015、2017、2019。不論是初學者或老鳥, 都建議更新到 2022 的版本。
微軟策略
微軟為了推廣Visual Studio,並鞏固Win10作業系統的市場,對旗下的Visual Studio產品並沒有防止盜版的機制。所以就算輸入了網路流傳的序號變成正式版,也不會被查出來。
再者身為一個開發人員,替微軟撰寫 Windows 裏的應用程式,為何還要付錢買 VS ?? 如果因使用 VS 需付高額的費用,那大家都不開發 Windows 應用程式,Windows裏可用的東西就少了,大家就會直接轉用 Linux 作業系統.
需注意一般公司行號的網路 IP 都會被監控,而且公司比較有錢可以進行索賠,所以請不要在公司內使用盜版。
Visual Studio 2022安裝
VS2022請由如下網址下載 : https://visualstudio.microsoft.com/zh-hant/downloads/
安裝時, 將下圖勾選的地方打勾
相關資訊如下
2022版本 Professional: TD244-P4NB7-YQ6XK-Y8MMM-YWV2J Enterprise: VHF9H-NXBBB-638P6-6JHCY-88JWH ----------------------------------------------- 2019版本 Professional: NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y Enterprise: BF8Y8-GN2QH-T84XB-QVY3B-RC4DF
Visual Studio 2017安裝
下載安裝程式 , 以下任選其一即可, 建議下載企業版
vs_Enterprise : 企業版
vs_Professional : 專業版
vs_Community : 社群版
然後直接安裝即可, 但這是使用線上安裝, 所以需一段時間(約一小時, 視網路狀況)
若想要使用離線安裝, 請於DOS 視窗下執行
vs_professional.exe --layout d:\vs2017 --lang zh-TW
若要下載英文版, 請將 –lang拿掉即可. 上述指令會開始下載所有的檔案, 總共有18G的容量, 若使用100M/40M 的網路, 約需30分鐘左右的時間. 待下載完成後, 執行vssetup.exe進行安裝.
啟動vs2017後, 僅為試用版本, 為期為30天. 若需長期使用, 請上網訂購付費版本, 取得序號後, 再啟動vs2017, 輸入序號即可成為正式永久使用版本
以下是編排時產生的亂碼, 無需理會
ps : NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y es : BF8Y8-GN2QH-T84XB-QVY3B-RC4DF
Visual Studio 視窗 SDK
SDK全名為 Software Development Kit, 軟体開發套件. 使用VS開發視窗程式時, 有二種SDK可用, 一個為Windows Form, 另一個是WPF.
Windows Form非常古老, 目前大部份的學校及補習班都教這個. 但使用Windows Form開發的視窗程式, 在Windows 10執行時會有很多問題. 所以不論是初學者或是老鳥, 都該捨棄這種古老的東西了.
WPF極其強大且精良, 習慣後, 就會覺的Windows Form簡直是垃圾. 所以只要學習這個 SDK 即可.
Windows 下的通用程式語言
在Windows作業系統上, 想要撰寫視窗App, 可以選擇 Java, Kotllin, Python, QT, WxWidget等. 上述都是跨平台語言(Linux/Windows/Mac), 而 Java/Kotlin 難度較高.
C#為目前業界標準, 可由此了解物件導向的機制. 缺點就是無法跨平台
專案開啟
對於初學者, C# 開啟新專案大約是三種, Console mode, Windows Form, 及WPF
Console Mode
由檔案/新增/專案, 然後選取Visual C#, 再選取主控台應用程式(.Net Framework), 切記, 不要選到.Net Core. .NetCode是要開發函數庫用的
然後選取目錄及輸入專案名稱後, 把為方案建立目錄取消, 這是給大型開發專案用的.
Windows Form
若要開發視窗程式的話, 則選擇Windows Form App(.Net Framework), 這是傳統的設計方式, 較為直覺, 也比較好學. 但很難使用.
Windows Form有個缺點, 就是在win10上執行時, 畫面會跑掉, 字体也會變模糊
開啟後的畫面如下
WPF
Windows Presentation Foundation, 使用XML描述視窗介面, 較難學, 但在使用上比Windows Form好用很多, 且在Win10上執行沒有任何問題. 日後的專案, 應該全面改用WPF, 所以建議千萬不要再使用 Windows Form了。
開啟專案時, 請選擇WPF 應用程式(.Net Framework)
開啟後的畫面如下
變數、型態、運算子
C#第一支程式
第一次使用C#撰寫程式, 可以使用主控台應用程式進行練習. 請由 檔案/新增/專案,選取Visual C#/主控台應用程式(.NetFramework). 然後選定資料夾, 並設定專案名稱. “為方案建立目錄” 可以不用打勾, 這是給大型專案用的
底下代碼黑色部份為系統自動列出的, 藍色部份請手動輸入
using System;
namespace ConsoleApplication1
{
class Program ç可自行修改名稱
{
static void Main(string[] args)
{
Console.WriteLine(“歡迎光臨”);
}
}
}
幾個注意事項如下
using System 是要引用System套件, 這套件由.netFramework提供, 包含了Console 等常用的物件.
namespace ConsoleApplication1 為定義此專案之命名空間(Name Space), 在Java 稱為 package, 說明白了, 就是說明這是位於那一個目錄的專案.
二個// 表示後面的文字為註解, 稱為單行註解. /*…… */ 則為多行註解
static void Main(string[] args) 此為程式執行的進入點, 一個類別只允許一個Main()方法. 而後面的大括弧 “{}”必需成對出現. 最後, 每行程式碼結尾, 皆需 加上 “;”
F5為執行並偵錯. 在Console模式下, 最後若沒有 Console.ReadLine, 則Console視窗會立即關閉.
Ctrl +F5 亦為執行但不偵錯, 程式執行到最後, 會自動要求使用者按任何鍵, 才會關閉視窗
變數(Variable)
變數(Variable), 是記憶体某一處的空間, 此空間使用一個變數名稱來稱呼它. 每次要使用變數, 都必需宣告, 告知系統變數的資料型態及其值. 型態分為基本資料型態及自訂資料型態(類別)
下列為常用的宣告方式
int var1, var2;
int var1=0, var2=0;
char c1= ‘M’; 直接使用字元
char c2= ‘\x0061′; 以 ‘a’ 字元的ASCII表示
char c3=’\u0061’; 以 ‘a’ 字元的UniCode表示
char c4=(char)97; 將int強制轉換成char
string str1 = “這是一個字串”;可使用 “+” 進行字串連接
變數命名規則
每個變數的名稱, 必需遵守如下命名規則
1. 使用匈牙利命名法 : 首字小寫, 第二單字開始, 首字大寫. 如 mScore, thisIsABook. 這是 Java的慣用法
2. 中間不可使+-*/@#…..等特殊符號, 也不可以使用空格
3. 中間可以使用底線 “_”, 如this_is_a_book, 這是C 語言的慣用法
4. 首字可以為底線, 如 _score, 但不建議, 因為這是系統級的變數
5. 首字不可以為數字, 如 58score
6. 類別名稱, 首字大寫
以上, 為一般程式的變數命名規則, 一定要熟記, 否則日後會大小寫不分.
另外, C# 的方法名稱, 採用首字大寫, 如Console.WriteLine, Console為物件, 所以首字大寫. WriteLine為方法名稱, 也是首字大寫.
常見的關鍵字 :
abstract, as, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, do, double, else, enum, event, false, finally, float, for, foreach, goto, if, in, int, interface, is, long, namespace, new, null, object, out, override, private, protected, public, return, short, sizeof, static, string, struct, switch, this, throw, true, try, typeof, using, virtual, void, while.
常數
常數是指其值於執行期間永遠不能變動, 宣告語法為 : const double PI=3.14159
基本型別(Value Type)
基本資料型別(primitive data type), 資料存於堆疊區(Stack),於執行開始即產生,於生命周期結束即自動移除
C#的基本資料型別如下, 可使用sizeof查大小
型別 | 大小 | 範圍 | Remark |
bool | 1Byte | true, false | |
byte | 1Byte | 0-255 | |
sbyte | 1Byte | -128~127 | |
char | 2Byte | 0-65535 | |
short | 2Byte | -32768~32767 | |
ushort | 2Byte | 0-65535 | |
int | 4Byte | -21億~21億 | |
uint | 4Byte | 0-42億 | |
long | 8Byte | -263~263-1 | |
ulong | 8Byte | 0~263-1 | |
float | 4Byte | 精準到小數第7位 | |
double | 8Byte | 精準到小數15位 | |
decimal | 16Byte | 有效位數28 | |
string | Object |
參考型別(Reference Type)
資料存於堆積區(Heap), 需使用new指令,於執行期中,動態產生。
Car a=new Car();
當方法結束,a即消失。但Car()物件尚存在Heap中,待Garbage collection啟動才刪除
C#運算子
算術運算子 : + – * / %
關係運算子 : == != > < >= <=
邏輯運算子 : && || !
位元運算子 : & | ^ ~
位移運算子 : >> <<
複合運算子 : += -= *= /= %= ^= &= |= <<= >>=
遞增遞減運算子 : ++ —
運算子優先順序 : ++è!~+-è*/% è+- è<<>>, 使用()改變順序
主控台應用程式
新增專案
執行
關閉專案
開啟專案
Exe輸出檔 : ConsoleApplication1\ConsoleApplication1\bin\Debug(Release)
主控台應用程式格式化輸入/輸出
string name;
int price;
Console.Write(“請輸入產品名 : “);
name=Console.ReadLine();
Console.Write(“請輸入單價 : “);
price = int.Parse(Console.ReadLine());
Console.WriteLine(“品名 : {0} 單價 : {1}”, name, price);
格式化輸出 : c(貨幣),Dn(n位數,不足補0), Fn(小數n位數), X(16進位)
Console.WriteLine(“{0:D10} {1:D3}”, a, 20);
Console.Write(“{0:X2} “, a); 以16進位顯示,每個數皆為2個數字. 若使用x, 就用小寫
自訂數值格式
int a = 65;
Console.WriteLine(“a=” + a.ToString(“000000 “));向右對齊,左邊補零
Console.WriteLine(“a=” + a.ToString(“###### “)); 向左對齊,右邊補空格
Console.WriteLine(b.ToString(“0000.00″));2位小數
Console.WriteLine(b.ToString(“0.000%”)); 將數字乘100再加%
: 0 # . ,
跳脫字元 : \’ \” \\ \a \b \n \r \t
資料型別轉換
隱含轉換 : 小轉大,自動轉換,int 可自動轉float
明確轉換 : 大轉小,強迫轉換,需程式設計師明確不會造成精度問題
short s=(short)int
列舉資料型別
常數的集合,只可使用於命名空間,類別,結構之內,不可宣告於Main()之內
public enum WeekDays : int { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7, };
使用 : Console.WriteLine((int)WeekDays.Monday);
結構資料型別
struct Product { public string no, name; public int price; } Product cpu; cpu.no = “001″; cpu.name = “處理器"; cpu.price = 9000;
不可宣告於Main()內
欄位需使用public才可為外部使用