裝箱(Boxing)和拆箱(Unboxing)是與「值類型」和「引用類型」之間轉換相關的概念。 裝箱(Boxing): 裝箱是將值類型(例如 int, char, double 等)轉換為對應的參考類型(通常是 object 類型或介面類型)的過程。 /* 當值類型裝箱時,會在Heap(堆積)記憶體中建立一個對象,將值類型的值複製到這個對象中,並傳回對對象的參考。 裝箱發生在需要將值類...
[C# 筆記] byte a =255; a+=5; a 的值是多少?
在C#中,當你對byte類型的變數進行算術運算,而結果超過了byte類型能夠表示的最大值(即255)時,就會發生溢位。溢出的行為取決於它發生的上下文。 byte a = 255; a += 5; //溢位。byte 0-255 /* 如果超過了byte的最大值,它會回到最小值。 260 % 256 = 4 因此,a最終的值將為4 */ 變數a的初始值是255,當你給它加上5時,結果是...
[C# 筆記] 什麼是擴展方法?
擴充方法(Extension Methods)是C#中一種特殊的靜態方法,它允許你為現有的類別新增新的方法,而無需修改原始類別的定義。擴充方法通常用於為.NET框架中的類型添加功能,甚至是無法修改的封閉原始碼的類別。 要建立擴充方法,需要滿足以下條件: 1)擴展方法必須是靜態方法。 2)擴展方法必須包含一個關鍵字 this 作為其第一個參數,該參數指定了該方法應用於的類型。這個參數...
[C# 筆記] string 和 StringBuilder 的區別,兩者表現的比較
string 和 StringBuilder 的區別,兩者表現的比較 1. 不可變性: string 是不可變的。 string 是 .NET 中表示不可變字串的類型。這意味著一旦創建了一個 string 對象,它的值就不能被修改。如果對其進行操作,將會生成一個新的 string 對象。 (一旦創建了一個字串對象,就不能更改其內容。對字串進行修改實際上是建...
[C# 筆記] byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '好'; byte g = 256; 這些變數錯在哪?
byte b = ‘a’; byte b = 'a';//編譯錯誤 byte b = (byte)'a'; //97, a的ascii碼的值為97 這行程式碼會引發編譯錯誤。雖然字元'a'可以隱式地轉換為整數,但是將其賦值給byte類型時,需要確保其值在byte類型的範圍內(0 到 255)。字元'a'的ASCII碼值為97,這是一個在byte範圍內的值,所以可以修改為 byte b ...
[C# 筆記] 字串中 null、""、string.Empty 的區別
null、”“、string.Empty 的區別 總結的來說,這三者的區別在於: null:空值,「未分配記憶」的引用 "" 和 string.Empty:空字串,「會分配儲存空間」,表示「長度為零」的字串,而string.Empty是""的更可讀的替代。 它們之間的差異如下: null string s = null; //空值,未分配記憶空間 這表示字串變...
[C# 筆記] 判斷閏年
判斷閏年 年份能夠要400整除.(2000) 年份能夠被4整除,但不能被100整除. (2008) Console.WriteLine("**請輸入年份***"); int input = Convert.ToInt32(Console.ReadLine()); if ((input % 400 == 0) || (input % 4 == 0 && inpu...
[C# 筆記] 計算時間差距: 天換算周+天、秒換算天+時+分+秒
練習:46天是幾周零幾天? int days = 46; int weeks = days / 7; int day = days % 7; Console.WriteLine($"{days}天是{weeks}周零{day}天"); 練習:107653秒是幾天幾小時幾分鐘幾秒? /* 60*60= 3600 一小時有3600秒 3600*24 = 86400 一天有86400秒 ...
[C# 筆記] 帳號密碼判斷
string username = "admin"; string password = "88888"; Console.WriteLine("請輸入帳號"); string id = Console.ReadLine()!; Console.WriteLine("請輸入密碼"); string pw = Console.ReadLine()!; //第一種情況:帳號密碼都正確 if ...
[C# 筆記] 成績評測
成績評測 >= 90 輸出 A >= 80 輸出 B >= 70 輸出 C >= 60 輸出 D < 60 輸出 E 使用 if-else if Console.WriteLine("**請輸入成績***"); int score = Convert.ToInt32(Console.ReadLine()); if (score >= 90) { ...