wds901209

@WDS

C# 邊學邊筆記

Joined on Aug 22, 2024

  • 1.什麼是依賴注入(DI)? 依賴注入是一種設計模式,用於實現類與類之間的鬆耦合。簡單來說,就是將一個物件所依賴的其他物件(如服務或資料庫存取層)從外部傳遞進來,而不是在類內部自己建立。 依賴注入是實現控制反轉(Inversion of Control, IoC)的一種方法。 2.為什麼需要依賴注入? 傳統寫法中,類與類之間是直接依賴的,這會導致以下問題: 耦合性高:類與具體實現綁定,難以更換實現或進行單元測試。 可測試性差:無法輕易替換依賴物件來進行測試(例如,無法使用 Mock 測試資料)。
     Like  Bookmark
  • 當你在C#中使用delegate(委託)時,想像它是一種"指向方法的指針"。你可以把它理解為一個容器,裡面裝的是指向某個方法的"地址"。這樣,你就可以在程式的其他地方利用這個容器來調用這個方法,而不用直接知道或寫出這個方法的具體細節。 例子 定義委託​​​​// 定義一個委託類型,它指向返回void且接受一個string參數的方法 ​​​​public delegate void MyDelegate(string message); 使用委託​​​​// 定義一個方法,與上面定義的委託類型匹配 ​​​​public void ShowMessage(string message) ​​​​{ ​​​​ Console.WriteLine(message);
     Like 1 Bookmark
  • 在 C# 中,static 和非 static 的背後邏輯差異主要在於它們如何在內存中處理,以及它們的行為與生命周期。 1. Memory Allocation(內存分配) Static(靜態): 靜態成員在應用程序啟動時就被分配內存,並且它們的內存是全局共享的。這意味著所有使用這個類別的實例共用相同的靜態成員。靜態成員存在於類別的靜態區域,不隨類的實例而變化。 Unstatic(非靜態): 非靜態成員與每個對象實例相關聯,當你創建類別的實例時,內存才會為這些成員分配。每個實例都有自己的一份非靜態成員,不會與其他實例共享。
     Like  Bookmark
  • void 在 C# 中,void 函數是一種不返回任何值的函數。這意味著當這個函數執行完畢後,不會有任何結果返回給呼叫者。通常,void 函數用於執行某些動作,例如顯示訊息或改變物件狀態,而不需要回傳結果。 using System; class Program { static void Main() { // 呼叫 Greet 函數
     Like  Bookmark
  • 定義並初始化兩個整數(num, length) (6, 5)-> [6, 12, 18, 24, 30] 建立一個大小為 length 的整數陣列 迴圈並將(迴圈計數器 x num)插入到陣列中 列印最終的陣列 using System; class Program {
     Like  Bookmark
  • 建立兩個包含整數數據類型的列表,一個用於偶數,一個用於奇數 迴圈從 0 到 20 如果數字是偶數,加入到偶數列表 如果數字是奇數,加入到奇數列表 列印偶數列表 列印奇數列表 using System; using System.Collections.Generic;
     Like  Bookmark
  • 在 C# 中,Dictionary 是一種非常有用的資料結構,它提供了一種高效的方式來儲存和查找鍵值對。每個鍵值對由一個「鍵」(key) 和一個「值」(value) 組成,其中鍵是唯一的。這意味著在同一個 Dictionary 中,沒有兩個鍵是相同的,但可以有多個值是相同的。 你應該先知道 鍵值對(Key-Value Pair)概念 什麼是鍵值對? Dictionary 是一個儲存鍵值對(Key-Value Pair)的集合。這裡的「鍵」(Key)是唯一的標識符,用來存取對應的「值」(Value)。例如,在電話簿中,鍵可以是某人的名字,而值是這個人的電話號碼。 為什麼鍵必須唯一? 每個鍵都必須是唯一的,因為 Dictionary 是透過鍵來查找值的。如果有多個相同的鍵,系統就不知道應該返回哪個對應的值。相當於一個鎖只能有一把對應的鑰匙。如果試圖插入相同的鍵,通常會覆蓋原來的值。 鍵和值的應用 這樣的鍵值對概念非常靈活,可以用來解決許多問題,像是快速查詢某個項目的相關資料(如ID查找名字),或是根據不同條件儲存對應的設定或資料。
     Like  Bookmark
  • 同步(Synchronous): 同步的意思是,當你在執行某個工作時,你必須等這個工作完成才能繼續做下一件事情。所有的工作都是依序進行的,沒有重疊。 例子: 想像你正在餐廳點餐,廚師開始為你準備餐點。你必須等待廚師做完菜,才能繼續做其他事情。這段等待時間內,你不能做其他的事,因為你只能等。 程式碼中的同步: 在同步程式碼中,當你呼叫一個方法(例如讀取檔案或從伺服器取得資料),你必須等這個方法完全執行完畢,程式才會繼續往下執行。 // 假設這是一個同步方法 string data = GetDataFromServer(); // 程式會等資料從伺服器傳回來才繼續
     Like  Bookmark
  • 在 C# 中,function(函數)是用來執行一段邏輯或行為的區塊,可以接收輸入(參數),並返回一個結果。它的正式名稱叫做「方法」 (method)。 函數的基本結構 函數的結構由返回型別、函數名稱、參數和函數體組成。以下是基本結構: 返回型別 函數名稱(參數) { // 函數的邏輯 return 回傳值; }
     Like  Bookmark
  • 在 C# 中,List<T> 是一種通用的集合類型,用來儲存一組同類型的對象。相較於陣列,List<T> 的大小是可變的,可以根據需要動態增加或移除元素。 以下是一些關於 C# List<T> 的基本介紹: using System; using System.Collections.Generic; // 使用 List 需要這個命名空間 class Program { static void Main() {
     Like  Bookmark
  • 在 C# 中,陣列(Array)是一種用來儲存固定大小的同類型元素的資料結構。陣列讓你能夠以索引的方式來存取這些元素。以下是一些關於 C# 陣列的簡單介紹: 陣列的宣告和初始化 宣告陣列 你可以先宣告一個陣列,並指定它的類型和大小,但不立即初始化它的內容。例如:​​​​int[] numbers; // 宣告一個整數型別的陣列 初始化陣列 你可以在宣告時直接初始化陣列,並指定它的元素:​​​​int[] numbers = new int[5]; // 宣告一個包含 5 個整數的陣列,所有元素初始為 0 使用初始值設定陣列 你也可以在宣告時就給陣列賦初值:​​​​int[] numbers = { 1, 2, 3, 4, 5 }; // 宣告並初始化一個包含 5 個整數的陣列
     Like  Bookmark
  • 包含 Get、Post、Put、Patch、Delete Get​​​​internal class HttpClientRequest ​​​​{ ​​​​ public static async Task<string> Get(string Url) ​​​​ { ​​​​ var client = new HttpClient(); ​​​​ // Get the response. ​​​​ HttpResponseMessage response = await client.GetAsync(Url);
     Like 1 Bookmark
  • 在 C# 中,enum(列舉)是一種特殊的數據類型,用來定義一組命名的整數常數。它可以讓你將一組相關的常數組織在一起,並使用有意義的名稱來表示這些常數,而不是直接使用數字。這樣可以使代碼更具可讀性和可維護性。 enum 的基本概念 定義:你可以使用 enum 關鍵字來定義一個列舉類型。列舉類型中的每個成員都對應一個整數值。 用途:列舉主要用於表示固定的、有限的選項或狀態。例如,星期幾、顏色、訂單狀態等。 如何定義和使用 enum 定義列舉 你可以定義一個列舉類型,例如:
     Like 1 Bookmark
  • try...catch 是 C# 中用來處理異常的結構,幫助你在程序出錯時進行控制和修正,而不會讓程序直接崩潰。這是異常處理的一個核心概念。 try...catch 的基本結構 try { // 嘗試執行可能會拋出異常的代碼 } catch (ExceptionType ex) { // 異常處理代碼:捕捉並處理異常
     Like  Bookmark
  • 生活中的比喻 ref 參數: 比喻: 想像你有一個可以調整的家用電視機,你把遙控器(ref 參數)給你的朋友。你告訴他調整音量或更改頻道。當他使用遙控器時,他的調整會直接影響到你的電視機,因為他控制的是同一台電視機。 解釋: 在這個比喻中,==電視機代表原始變數==,==遙控器代表 ref 參數==。你需要在使用遙控器之前==先開啟電視機==(初始化變數),因為你希望他可以直接修改電視機的設置(修改變數的值)。 out 參數: 比喻: 想像你給你的朋友一個空盒子(out 參數),告訴他把一些資料放到盒子裡面(例如,放入一份文件)。當他完成後,你可以取回這個裝滿資料的盒子。你在給他盒子時==並不要求他事先填入任何資料==,但他必須在返回盒子之前填滿資料。 解釋: 在這個比喻中,盒子代表 out 參數。==你不需要提前準備好資料(初始化)==,但是你的==朋友必須在盒子裡放入資料(初始化 out 參數)==,這樣你才能拿到完整的資料(返回結果)。 特點 ref 參數
     Like  Bookmark
  • 讀取使用者的輸入:首先,程式會要求使用者輸入一個密碼,並將該密碼儲存在變數 password 中。接著,程式會要求使用者再輸入一次密碼,並將該密碼儲存在變數 passwordC 中。 檢查密碼是否符合條件: 程式首先檢查第一個密碼是否為空,如果是空的,則提示使用者輸入密碼。 如果第一個密碼不為空,程式會檢查第二次輸入的密碼是否為空,如果是空的,則提示使用者再次輸入密碼進行確認。 如果兩個密碼都不為空,程式會檢查兩個密碼的長度是否至少為6個字元,如果不是,則提示使用者輸入至少6個字元。 如果密碼的長度符合要求,程式會檢查兩個密碼是否相同。如果相同,則顯示「密碼相同」的訊息;否則,顯示「密碼不同」。 提示訊息:根據不同的條件,程式會輸出相應的提示訊息,幫助使用者了解輸入的錯誤或確認密碼成功。 using System;
     Like  Bookmark
  • 在 C# 中,TryParse 方法是一種靜態方法,用於將字串轉換為特定型別的數據。它提供了一種安全的轉換方式,在轉換失敗時不會拋出例外,而是返回一個布林值,告訴你轉換是否成功。 TryParse 的基本概念 定義:TryParse 方法有多種不同的版本,用於不同的資料型別,例如 int.TryParse、double.TryParse、DateTime.TryParse 等等。每個版本都接受一個字串作為輸入,並返回該型別的輸出。 用途:TryParse 主要用於從字串安全地轉換為其他資料型別,例如從用戶輸入的字串轉換為整數或浮點數。這樣可以避免使用 Parse 方法時因格式錯誤而拋出的例外。 如何使用 TryParse 基本用法 使用 TryParse 方法可以簡單地將字串轉換為其他資料型別,並檢查轉換是否成功:​​​​string input = "123"; ​​​​int result;
     Like  Bookmark
  • C# 泛型(Generics)是一種允許你定義類別、介面或方法時使用型別參數的特性。這樣的特性可以讓代碼更具彈性和可重用性,而不必在每次需要不同的數據型別時重新定義新的類別或方法。泛型的主要目的是提高代碼的可重用性和型別安全性。 泛型的基本概念 定義:泛型使用尖括號 <T> 來表示型別參數。T 是一個佔位符,可以是任何型別,如 int、string 等。 用途:泛型主要用於創建可重用的程式碼,例如泛型集合類別(List<T>、Dictionary<TKey, TValue>)、泛型方法等。它們能有效減少重複代碼,提高代碼的可讀性和可維護性。 如何定義和使用泛型 定義泛型類別
     Like  Bookmark
  • Convert.ToInt32 方法 功能: 將不同的數據類型(如字符串、浮點數、布爾值等)轉換為 int。它是 Convert 類的一部分,具有處理多種輸入類型的能力。行為:-可以將 null 值轉換為 0,而不會拋出異常。 -可以處理一些字符串值,如 "123" 轉換為 123。 -如果字符串中包含無法轉換為整數的內容(如字母),會拋出 FormatException。 -支持將 true 轉換為 1,將 false 轉換為 0。 -將浮點數轉換為整數時,會執行四捨五入操作。​​​​string str = "123"; ​​​​int number = Convert.ToInt32(str); // number = 123 ​​​​bool isTrue = true; ​​​​int boolToInt = Convert.ToInt32(isTrue); // boolToInt = 1
     Like  Bookmark
  • C# 中的標準數值格式字串(Standard Numeric Format Strings)是一組用來格式化數值輸出的預定義字串。這些格式字串可以簡單地控制數字在輸出時的表示形式,比如小數位數、千位分隔符、貨幣符號等。標準數值格式字串由一個格式字母(如 "C"、"D"、"E" 等)後跟一個可選的精度說明符組成。 常見的標準數值格式字串 "C" 或 "c" - 貨幣格式(Currency): 格式化數值為貨幣表示形式,會包括貨幣符號(如美元符號 $ 或其他區域性貨幣符號)。精度說明符控制小數位數的顯示(默認為 2)。​​​​double amount = 1234.56; ​​​​string result = amount.ToString("C"); // $1,234.56 "D" 或 "d" - 十進位格式(Decimal): 格式化整數為十進制表示,不包含千位分隔符。只能用於整數型別。 精度說明符指定最小位數,不足位數會補零。​​​​int number = 42;
     Like 1 Bookmark