# [112]天方科技 ASP.net core 教育訓練 1120309(VS專案建置、C#基礎結構)
## 使用Visual Studio建置專案
### 點擊上方工具列 檔案→新增→專案。

### 我們要使用的是 .NET Core Web API,可在上方搜尋列輸入關鍵字,或者使用下拉式選單做條件過濾。

### 建立的專案名稱會與解決方案名稱一樣,除非有修改過解決方案名稱,否則兩者名稱同步,可選擇專案位置。
解決方案:可用來管理多個不同專案。

### 通常會將下方選項勾選,將解決方案以及專案放在同個位置。

### 架構使用 .NET6.0以上版本(目前都使用最新版本7.0),設定部分注意最下方三個選項。
**使用控制器**:會有預設Controllers建置,初次接觸建議勾選。
**啟用OpenAPI支援**:會建置swagger功能,可測試API功能,以及產生API說明文件。
**不要使用最上層陳述式**:Programs.cs檔案是專案開啟時的核心檔案,勾選此選項,會將Programs.cs裡的C#簡寫,初次接觸建議勾選,以了解C#原始結構。

### 建置完成

### 執行專案

### 執行後進入Swagger頁面

## C#結構、型別簡介
使用Program.cs當作範例。

`public static void Main(string[] args)`
**Main()** 為進入點 .NET執行時先進入此方法,一般來說只有一個Main()
### 關鍵字
namespace:命名空間,所有C#程式基本包在namespace裡,用來區分class名稱,如不使用也可以,但容易出現class名稱重複的error
public:為存取修飾詞,public是公用存取層級,常用的有private、protected
static:為宣告修飾詞,static用來宣告靜態成員,常用的有readonly 、override
void:為方法的回傳型別,void指方法不會回傳值,也可使用int、string
型別系統可透過C#關鍵字介紹多加了解
參考:
[**C# 關鍵字**](https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/)
### value type:可直接讀取值
1.Struct:結構型別,可定義變數、屬性、方法,**無法被繼承**,記憶體儲存為stack區,速度快,容量小
2.Enum:列舉型別,資料可被列舉,有被限制個數的型別
此圖a變數要賦予列舉型別WeekDay,只能從被設定的7個值選

### reference type:讀取值所在的參考位址
1.Class:類別型別,最常用型別,可定義變數、屬性、方法,**可被繼承**,記憶體儲存為Heap區,容量大
":"為繼承標誌,後面放置Class或者Interface則會繼承,須注意Class只能單一繼承,Interface可以多重繼承

2.Interface:**本身無法實作**,需透過Class、Strcut繼承並實作,用來定義型別需要有的資料成員或方法成員,變數命名習慣以I開頭,例ITest(){},
使用Struct繼承Interface,實作void xx()

3.Delegate:委派型別,只定義一個**方法**的回傳型別、參數型別,只要方法所需的參數型別符合Delegate的設定,都可以被Delegate呼叫,例如Click事件,當我們寫好方法與Click事件繫結,就是將此方法委派給Click事件

最後可簡寫成Lambda運算式
