[{"data":1,"prerenderedAt":1619},["ShallowReactive",2],{"note-\u002Fnotes\u002Fsync\u002Fcsharp-01":3},{"id":4,"title":5,"body":6,"category":1606,"date":1607,"description":22,"draft":1608,"extension":1609,"meta":1610,"navigation":219,"path":1611,"seo":1612,"sourcePath":1613,"stem":1614,"tags":1615,"__hash__":1618},"notes\u002Fnotes\u002Fsync\u002Fcsharp-易混淆概念-易混淆概念01.md","易混淆概念01",{"type":7,"value":8,"toc":1565},"minimark",[9,14,19,23,36,53,56,59,63,69,74,87,117,127,181,183,187,192,205,327,331,336,360,365,374,378,383,388,391,394,399,408,410,423,426,429,438,441,450,463,472,477,480,484,488,496,499,503,522,524,528,532,541,545,556,560,563,566,569,574,582,586,698,700,704,707,718,721,724,727,731,734,745,749,752,755,775,779,782,787,791,794,799,803,806,817,819,822,826,837,841,852,869,871,874,1017,1019,1022,1027,1031,1036,1051,1056,1071,1073,1076,1085,1107,1109,1112,1114,1118,1123,1126,1158,1161,1226,1316,1320,1399,1402,1441,1444,1463,1467,1469,1473,1478,1482,1485,1510,1513,1517,1520,1523,1525,1529,1532,1535,1537,1541,1544,1547,1549,1553,1555,1559,1561],[10,11,13],"h2",{"id":12},"ㄧfunction","ㄧ、Function",[15,16,18],"h3",{"id":17},"什麼是function函式","什麼是Function（函式）？",[20,21,22],"p",{},"硬體底層的運算軌道裡，滿足以下三者才能被稱作Function",[24,25,26,30,33],"ul",{},[27,28,29],"li",{},"有輸入（參數）。",[27,31,32],{},"有內部邏輯加工：負責執行特定的運算或程式碼邏輯。",[27,34,35],{},"有輸出（回傳值）：它執行了 return。",[37,38,43],"pre",{"className":39,"code":40,"language":41,"meta":42,"style":42},"language-csharp shiki shiki-themes github-light github-dark","static string GetChicken() { return \"孤獨一隻雞\"; }\n","csharp","",[44,45,46],"code",{"__ignoreMap":42},[47,48,51],"span",{"class":49,"line":50},"line",1,[47,52,40],{},[20,54,55],{},"雖然因為它住進了 class Program 大宅裡，而在口頭上稱呼它為 「Method（方法）」，但它本質上就是一尊活生生的 Function。",[20,57,58],{},"=================",[15,60,62],{"id":61},"function函式與method方法","Function（函式）與Method（方法）",[64,65,66],"blockquote",{},[20,67,68],{},"在 C# 的世界裡，所有的方法（Method）本質上都是函式（Function），但只有「寄生在類別或結構肚子裡」的函式，才有資格被尊稱為方法。",[70,71,73],"h4",{"id":72},"可以用變數的物理居住地來劃分","可以用變數的「物理居住地」來劃分",[24,75,76],{},[27,77,78,79],{},"函式 (Function) ➔ 自由流浪的頭等公民\n",[24,80,81,84],{},[27,82,83],{},"物理定義：它是獨立存在的。它不屬於任何人，不需要依附在任何 class 或 struct 大宅裡。你只要呼叫它的名字，它就能當場點火通電。",[27,85,86],{},"前端 JS 視角：你在 JavaScript 檔案頂層隨手寫的 function，就是標準的函式。",[37,88,92],{"className":89,"code":90,"language":91,"meta":42,"style":42},"language-javascript! shiki shiki-themes github-light github-dark","\u002F\u002F 這是純度 100% 的 Function，它是自由的\nfunction sayHello() {\n    console.log(\"Hello\");\n}\n\n","javascript!",[44,93,94,99,105,111],{"__ignoreMap":42},[47,95,96],{"class":49,"line":50},[47,97,98],{},"\u002F\u002F 這是純度 100% 的 Function，它是自由的\n",[47,100,102],{"class":49,"line":101},2,[47,103,104],{},"function sayHello() {\n",[47,106,108],{"class":49,"line":107},3,[47,109,110],{},"    console.log(\"Hello\");\n",[47,112,114],{"class":49,"line":113},4,[47,115,116],{},"}\n",[24,118,119],{},[27,120,121,122],{},"方法 (Method) ➔ 寄生在物件大宅裡的「附屬器官」\n",[24,123,124],{},[27,125,126],{},"物理定義：它是物件導向（OOP）宇宙下的產物。它被迫必須寫在 class 或 struct 的肚子裡。它沒辦法單獨存活，外人想要對它通電，必須先呼叫它主人的名字（物件實例）。",[37,128,130],{"className":39,"code":129,"language":41,"meta":42,"style":42},"public class Robot \n{\n    \u002F\u002F 這是 Method（方法）！因為它寄生在 Robot 大宅裡\n    \u002F\u002F 外面不能直接呼叫 Walk()，必須先 new Robot().Walk()\n    public void Walk() \n    {\n        Console.WriteLine(\"機器人走路\");\n    }\n}\n",[44,131,132,137,142,147,152,158,164,170,176],{"__ignoreMap":42},[47,133,134],{"class":49,"line":50},[47,135,136],{},"public class Robot \n",[47,138,139],{"class":49,"line":101},[47,140,141],{},"{\n",[47,143,144],{"class":49,"line":107},[47,145,146],{},"    \u002F\u002F 這是 Method（方法）！因為它寄生在 Robot 大宅裡\n",[47,148,149],{"class":49,"line":113},[47,150,151],{},"    \u002F\u002F 外面不能直接呼叫 Walk()，必須先 new Robot().Walk()\n",[47,153,155],{"class":49,"line":154},5,[47,156,157],{},"    public void Walk() \n",[47,159,161],{"class":49,"line":160},6,[47,162,163],{},"    {\n",[47,165,167],{"class":49,"line":166},7,[47,168,169],{},"        Console.WriteLine(\"機器人走路\");\n",[47,171,173],{"class":49,"line":172},8,[47,174,175],{},"    }\n",[47,177,179],{"class":49,"line":178},9,[47,180,116],{},[20,182,58],{},[15,184,186],{"id":185},"關於function","關於Function",[64,188,189],{},[20,190,191],{},"C# 的宇宙裡，任何 function 都不准單獨在外面流浪",[24,193,194],{},[27,195,196,197],{},"Func 就是 C# 的 Function 變數型別\n",[24,198,199,202],{},[27,200,201],{},"如果你的箭頭函式有 return 回傳值 ➔ 它的型別叫做 Func",[27,203,204],{},"如果你的箭頭函式純粹做事情，不 return 東西（void） ➔ 它的型別叫做 Action",[37,206,208],{"className":39,"code":207,"language":41,"meta":42,"style":42},"using System;\n\nnamespace CharliesCSharpDemo;\n\n\u002F\u002F 1. 宣告一個極輕量、住 Stack 的 struct\npublic struct OrderProcessor\n{\n    public string OrderId { get; set; }\n    public double TotalAmount { get; set; }\n\n    \u002F\u002F 🚀 亮點：在 struct 肚子裡裝一尊自由的 Func 變數（吃 double，回傳 double）\n    public Func\u003Cdouble, double> DiscountStrategy { get; set; }\n\n    \u002F\u002F 2. 一個普通 Method，在內部點火執行那一尊外來的 Func\n    public readonly double CalculateFinalPrice()\n    {\n        if (DiscountStrategy == null) return TotalAmount;\n        \n        \u002F\u002F 物理通電：把金額餵給那個動態傳進來的箭頭函式\n        return DiscountStrategy(TotalAmount); \n    }\n}\n\n",[44,209,210,215,221,226,230,235,240,244,249,254,259,265,271,276,282,288,293,299,305,311,317,322],{"__ignoreMap":42},[47,211,212],{"class":49,"line":50},[47,213,214],{},"using System;\n",[47,216,217],{"class":49,"line":101},[47,218,220],{"emptyLinePlaceholder":219},true,"\n",[47,222,223],{"class":49,"line":107},[47,224,225],{},"namespace CharliesCSharpDemo;\n",[47,227,228],{"class":49,"line":113},[47,229,220],{"emptyLinePlaceholder":219},[47,231,232],{"class":49,"line":154},[47,233,234],{},"\u002F\u002F 1. 宣告一個極輕量、住 Stack 的 struct\n",[47,236,237],{"class":49,"line":160},[47,238,239],{},"public struct OrderProcessor\n",[47,241,242],{"class":49,"line":166},[47,243,141],{},[47,245,246],{"class":49,"line":172},[47,247,248],{},"    public string OrderId { get; set; }\n",[47,250,251],{"class":49,"line":178},[47,252,253],{},"    public double TotalAmount { get; set; }\n",[47,255,257],{"class":49,"line":256},10,[47,258,220],{"emptyLinePlaceholder":219},[47,260,262],{"class":49,"line":261},11,[47,263,264],{},"    \u002F\u002F 🚀 亮點：在 struct 肚子裡裝一尊自由的 Func 變數（吃 double，回傳 double）\n",[47,266,268],{"class":49,"line":267},12,[47,269,270],{},"    public Func\u003Cdouble, double> DiscountStrategy { get; set; }\n",[47,272,274],{"class":49,"line":273},13,[47,275,220],{"emptyLinePlaceholder":219},[47,277,279],{"class":49,"line":278},14,[47,280,281],{},"    \u002F\u002F 2. 一個普通 Method，在內部點火執行那一尊外來的 Func\n",[47,283,285],{"class":49,"line":284},15,[47,286,287],{},"    public readonly double CalculateFinalPrice()\n",[47,289,291],{"class":49,"line":290},16,[47,292,163],{},[47,294,296],{"class":49,"line":295},17,[47,297,298],{},"        if (DiscountStrategy == null) return TotalAmount;\n",[47,300,302],{"class":49,"line":301},18,[47,303,304],{},"        \n",[47,306,308],{"class":49,"line":307},19,[47,309,310],{},"        \u002F\u002F 物理通電：把金額餵給那個動態傳進來的箭頭函式\n",[47,312,314],{"class":49,"line":313},20,[47,315,316],{},"        return DiscountStrategy(TotalAmount); \n",[47,318,320],{"class":49,"line":319},21,[47,321,175],{},[47,323,325],{"class":49,"line":324},22,[47,326,116],{},[70,328,330],{"id":329},"get-set-到底是什麼","{ get; set; } 到底是什麼？",[24,332,333],{},[27,334,335],{},"標準的物件導向寫法",[37,337,339],{"className":39,"code":338,"language":41,"meta":42,"style":42},"private string _orderId; \u002F\u002F 物理底層私有欄位\n\npublic string GetOrderId() { return _orderId; } \u002F\u002F 讀取門衛\npublic void SetOrderId(string value) { _orderId = value; } \u002F\u002F 寫入門衛\n",[44,340,341,346,350,355],{"__ignoreMap":42},[47,342,343],{"class":49,"line":50},[47,344,345],{},"private string _orderId; \u002F\u002F 物理底層私有欄位\n",[47,347,348],{"class":49,"line":101},[47,349,220],{"emptyLinePlaceholder":219},[47,351,352],{"class":49,"line":107},[47,353,354],{},"public string GetOrderId() { return _orderId; } \u002F\u002F 讀取門衛\n",[47,356,357],{"class":49,"line":113},[47,358,359],{},"public void SetOrderId(string value) { _orderId = value; } \u002F\u002F 寫入門衛\n",[24,361,362],{},[27,363,364],{},"屬性語法糖",[37,366,368],{"className":39,"code":367,"language":41,"meta":42,"style":42},"public string OrderId { get; set; }\n",[44,369,370],{"__ignoreMap":42},[47,371,372],{"class":49,"line":50},[47,373,367],{},[70,375,377],{"id":376},"func-到底算是方法-method還是函式-function","Func 到底算是「方法 (Method)」還是「函式 (Function)」？",[64,379,380],{},[20,381,382],{},"在 C# 裡，Func 在「行為」上是 Function（函式），但在「底層物理型別」上，它是一個物件（Object）！",[64,384,385],{},[20,386,387],{},"Func 算是一個變數\u002F物件",[20,389,390],{},"+++++++++",[20,392,393],{},"Action 沒有回傳值算是Function嗎？",[64,395,396],{},[20,397,398],{},"Func 和 Action 物理地位完全平起平坐，兩個都必須算成是 Function 的一種！",[20,400,401],{},[402,403,404],"em",{},[405,406,407],"strong",{},"其實 Action 在底層「也有 Return」=> Void 函式",[20,409,390],{},[24,411,412],{},[27,413,414,415],{},"總結：\n",[24,416,417,420],{},[27,418,419],{},"C# 的 { get; set; } ➔ 就是讓變數變成外人可以讀寫的標準屬性。",[27,421,422],{},"C# 的 Func ➔ 就是 JS 裡的 Function 變數欄位（可以裝箭頭函式的容器）。",[20,424,425],{},"====================",[15,427,428],{"id":428},"函式語法結構定義",[37,430,432],{"className":39,"code":431,"language":41,"meta":42,"style":42},"[修飾詞] [回傳型別] [方法名稱]([參數型別] [參數名稱])\n",[44,433,434],{"__ignoreMap":42},[47,435,436],{"class":49,"line":50},[47,437,431],{},[20,439,440],{},"看看一般的基本型別寫法",[37,442,444],{"className":39,"code":443,"language":41,"meta":42,"style":42},"public static int CalculateAge(string birthDate)\n",[44,445,446],{"__ignoreMap":42},[47,447,448],{"class":49,"line":50},[47,449,443],{},[64,451,452],{},[20,453,454,455,458,459,462],{},"此處 ",[44,456,457],{},"int"," 後面不會有變數名稱，因為它代表的是",[405,460,461],{},"輸出型別","。",[37,464,466],{"className":39,"code":465,"language":41,"meta":42,"style":42},"[回傳型別] [方法名稱] ( [參數型別_1] [參數名稱_1], [參數型別_2] [參數名稱_2], ... )\n",[44,467,468],{"__ignoreMap":42},[47,469,470],{"class":49,"line":50},[47,471,465],{},[64,473,474],{},[20,475,476],{},"參數「必須有名稱」才能在方法內被使用",[478,479],"hr",{},[10,481,483],{"id":482},"二console控制台專案和-web-api網頁專案","二、Console（控制台專案）和 Web API（網頁專案）",[15,485,487],{"id":486},"console-專案單純跑完即死的打工仔","Console 專案：單純、跑完即死的「打工仔」",[24,489,490,493],{},[27,491,492],{},"微軟預載的依賴：極度乾淨、輕量。它底層只認最基础的資料結構（如 int、string、List），完全沒有處理網路 HTTP 請求、路由、安全性驗證、JSON 序列化的能力。",[27,494,495],{},"使命：\n-    練習 LeetCode 演算法、測試 C# 新語法\n-    寫排程工具（Cron Job）",[20,497,498],{},"==================",[15,500,502],{"id":501},"web-api-專案永不熄燈瘋狂接客的鋼鐵飯店","Web API 專案：永不熄燈、瘋狂接客的「鋼鐵飯店」",[24,504,505,508],{},[27,506,507],{},"生存邏輯：「死循環監聽（Infinite Loop）」。",[27,509,510,511],{},"在建立專案時，就幫你強行灌入了一整套龐大的 ASP.NET Core 框架網頁伺服器（Kestrel）\n",[24,512,513,516,519],{},[27,514,515],{},"前端傳過來的 JSON 怎麼自動轉成 C# 物件？",[27,517,518],{},"網址路由 \u002Fapi\u002Fproduct\u002F123 該分配給哪一個 Controller（控制器）去加工？",[27,520,521],{},"怎麼跟前端的 Next.js 跨網域（CORS）通訊？",[478,523],{},[10,525,527],{"id":526},"三-get-set","三、{ get; set; }",[15,529,531],{"id":530},"是什麼","是什麼？",[533,534,535,538],"ol",{},[27,536,537],{},"屬性 (Property)」",[27,539,540],{},"物理本質是微軟幫你自動生成的「小守門員方法（Method）」",[15,542,544],{"id":543},"存在何處","存在何處？",[533,546,547,550,553],{},[27,548,549],{},"{ get; set; } 不是看記憶體位置（Heap\u002FStack）決定的，而是看「階級身分」決定的。",[27,551,552],{},"只要它是屬於 class 或 struct 的「大樓成員（屬性）」，它就有資格配戴 { get; set; } 這對守門員佩刀。",[27,554,555],{},"如果它只是方法肚子裡的「臨時工（區域變數）」，就絕對不能加 { get; set; }。",[15,557,559],{"id":558},"為什麼","為什麼？",[20,561,562],{},"只有「外層的成員」有資格擁有 { get; set; }，是因為它們的生命夠長、且身負「跟外面世界通訊」的職責。",[20,564,565],{},"方法肚子裡的變數，只是為了幫外面那些尊貴的成員做短暫代工的「數字打工仔」，所以只配光溜溜地躺在 Stack 裡，不配穿上 { get; set; } 這套制服。",[15,567,568],{"id":568},"init",[64,570,571],{},[20,572,573],{},"在 init 誕生以前，微軟面臨了一個兩難的軟體工程大悖論：",[24,575,576,579],{},[27,577,578],{},"如果用 { get; set; }：\n外面點火很爽，可以用大括號自由挑選參數 new ConnectionOptions { Host = \"db.com\" }。但缺點是，這棟大樓蓋好後，外面任何人都可以在幾天後隨時跑來改它（例如 options.Host = \"hacker.com\"）。這在需要「高安全性、不希望配置被亂改」的 Web API 專案裡，是個巨大的不安全地雷。",[27,580,581],{},"如果用 { get; } + 建構子（唯讀）：\n雖然安全（出生後就鎖死），但你就被迫必須在 class 肚子裡寫一堆又臭又長的建構子電線，外面的人 new 時還得嚴格遵守參數順序，失去了大括號物件初始化器的自由度。",[15,583,585],{"id":584},"set-vs-init-vs-readonly-終極大對齊","set vs init vs readonly 終極大對齊",[587,588,589,620],"table",{},[590,591,592],"thead",{},[593,594,595,600,603,610,617],"tr",{},[596,597,599],"th",{"align":598},"left","守門員寫法",[596,601,602],{"align":598},"允許在「建構子」裡賦值？",[596,604,605,606,609],{"align":598},"允許在「大括號 ",[44,607,608],{},"{}"," 初始化器」裡？",[596,611,612,613,616],{"align":598},"物件 ",[44,614,615],{},"new"," 完後，允許在外面隨時修改？",[596,618,619],{"align":598},"它的終極人設",[621,622,623,647,676],"tbody",{},[593,624,625,633,636,638,641],{},[626,627,628],"td",{"align":598},[405,629,630],{},[44,631,632],{},"{ get; set; }",[626,634,635],{"align":598},"🟢 可以",[626,637,635],{"align":598},[626,639,640],{"align":598},"🟢 可以（完全自由）",[626,642,643,646],{"align":598},[405,644,645],{},"開放式住家","：隨時歡迎你來改。",[593,648,649,656,658,661,664],{},[626,650,651],{"align":598},[405,652,653],{},[44,654,655],{},"{ get; init; }",[626,657,635],{"align":598},[626,659,660],{"align":598},"🟢 可以（這就是它的超能力！）",[626,662,663],{"align":598},"❌ 絕對不行（當場鎖死）",[626,665,666,669,670,672,673,675],{"align":598},[405,667,668],{},"新創安全鎖","：",[44,671,615],{}," 的時候讓你填，",[44,674,615],{}," 完立刻灌漿封死。",[593,677,678,685,687,690,692],{},[626,679,680],{"align":598},[405,681,682],{},[44,683,684],{},"{ get; }",[626,686,635],{"align":598},[626,688,689],{"align":598},"❌ 絕對不行（編譯器噴錯）",[626,691,663],{"align":598},[626,693,694,697],{"align":598},[405,695,696],{},"古代銅牆鐵壁","：只有親生父親（建構子）能填，其他人碰都不准碰。",[478,699],{},[10,701,703],{"id":702},"肆五層通電過濾網","肆、五層通電過濾網",[15,705,706],{"id":706},"五層簡介",[37,708,712],{"className":709,"code":710,"language":711,"meta":42,"style":42},"language-Plaintext! shiki shiki-themes github-light github-dark","［第1層：權限］ ➔ ［第2層：空間與繼承］ ➔ ［第3層：狀態］ ➔ ［第4層：契約］ ➔ ［第5層：特異功能］ ➔ ［型別］ ➔ ［名字］\n","Plaintext!",[44,713,714],{"__ignoreMap":42},[47,715,716],{"class":49,"line":50},[47,717,710],{},[70,719,720],{"id":720},"順序",[20,722,723],{},"$$\\text{我有權限看嗎？} \\rightarrow \\text{它在 RAM 的哪張表上？} \\rightarrow \\text{那塊晶片防不防寫？} \\rightarrow \\text{初始化有沒有少材料？} \\rightarrow \\text{CPU 該用什麼模式跑？}$$",[20,725,726],{},"權限 ➔ 記憶體地址 ➔ 晶片狀態 ➔ 初始化 ➔ CPU 運作",[70,728,730],{"id":729},"第一層權限濾網誰能調用我-決定人際關係","🔴 第一層：權限濾網（誰能調用我？）➔ 決定「人際關係」",[20,732,733],{},"這層站在最前面，第一時間決定外面的路人、隔壁的專案、或是自己的兒子能不能摸到這條電路。",[24,735,736,739,742],{},[27,737,738],{},"public（大老二流派）：全宇宙、全專案的任何人（包含你的 Next.js 前端 API 路由）都可以公開存取。",[27,740,741],{},"private（邊緣人流派）：只有這個 class\u002Fstruct 自己肚子裡的代碼才能用，外面的人連看都看不到（例如私有欄位 _orderId 門衛）。",[27,743,744],{},"protected（家族繼承流派）：只有自己、以及親生兒子（子類別）才能通電，外面的鄰居路人一律不給碰。",[70,746,748],{"id":747},"第二層空間與繼承濾網我怎麼存在子孫能改嗎-決定物理定位與多型基因","🔵 第二層：空間與繼承濾網（我怎麼存在？子孫能改嗎？）➔ 決定「物理定位與多型基因」",[20,750,751],{},"⚠️ 核心鐵律：這一層的所有關鍵字，在 C# 語法裡是「互斥」的！它們佔用同一個生態位，你只能多選一，絕對不可能同時出現！",[20,753,754],{},"沒有寫（一般實例成員）：它是附屬器官。外面的人一定要先 new 出一個肉身實體大樓，才能透過點（.）來調用。",[24,756,757,760,763,766,769,772],{},[27,758,759],{},"static（靜態成員）：免 new 的「大樓公共廁所」！一開車就物理性黏在記憶體核心 VIP 區，全宇宙共享唯一一份。",[27,761,762],{},"virtual（虛擬基因）：老爸說：「這是一個原廠音響，我寫了基礎功能，但我允許兒子未來可以把它拆掉改裝（可覆寫）。」",[27,764,765],{},"override（覆寫基因）：兒子說：「我現在正拿著工具把老爸的舊音響拆了，強行換上我的重低音藍牙音響（覆寫完成）。」",[27,767,768],{},"abstract（抽象契約）：老爸只在牆上畫了一個音響的線條框框，肚子裡沒晶片，轉頭咆哮：「你生出來時必須自己實作出來，不然不准開機！」",[27,770,771],{},"sealed（封印密封）：大兒子改裝完音響後，拿電焊把外殼死死焊住：「到我為止！接下來的曾孫輩不准再改這台音響了！」",[27,773,774],{},"new（血緣隱藏）：兒子想裝新音響，但不想拆老爸的，直接在旁邊偷偷加掛一台，假裝老爸那台不存在。",[70,776,778],{"id":777},"第三層狀態濾網能不能改我-決定肉身能不能變更","🟢 第三層：狀態濾網（能不能改我？）➔ 決定「肉身能不能變更」",[20,780,781],{},"這層決定了這塊記憶體格子被填入資料後，電路開關會不會被硬性鎖死。",[24,783,784],{},[27,785,786],{},"readonly（唯讀）：只能在出生（建構子）那一秒被設定一次，之後直接灌漿鎖死，只能讀取（get），不能寫入（set）。(註：如果是屬性 Property，現代 C# 通常會用 init; 在後方大括號結合控制)。",[70,788,790],{"id":789},"第四層契約濾網有沒有強迫填值-決定初始化的強迫症","🟡 第四層：契約濾網（有沒有強迫填值？）➔ 決定「初始化的強迫症」",[20,792,793],{},"這是現代 C# 逼迫外部工程師的硬核防呆契約。",[24,795,796],{},[27,797,798],{},"required（強迫症契約）：強迫外部工程師在 new 的那一秒，必須用大括號把這條電路的數值交出來（例如：new Order() { OrderId = \"123\" }），漏填連編譯都不會過。",[70,800,802],{"id":801},"第五層特異功能濾網這條電路怎麼跑-決定執行流的外掛","🟣 第五層：特異功能濾網（這條電路怎麼跑？）➔ 決定「執行流的外掛」",[20,804,805],{},"這一層決定了這段代碼在被 CPU 執行時，有沒有什麼特殊的「物理時空扭曲」：",[24,807,808,811,814],{},[27,809,810],{},"async（非同步）：時間管理大師。通電時不需要在原地傻傻等它完工，CPU 可以先跳去接別的電路（前端最熟的 async \u002F await）。",[27,812,813],{},"unsafe（不安全代碼）：解鎖硬體禁區。允許在這段代碼裡像 C\u002FC++ 一樣，直接操作實體記憶體指針（Pointer），海關（CLR）不再保護你。",[27,815,816],{},"extern（外部調用）：這條電路的本體根本不在 C# 肚子裡， expansion 到外部去呼叫 C++ 編譯出來的 .dll 檔案。",[20,818,58],{},[15,820,821],{"id":821},"衝突",[70,823,825],{"id":824},"衝突一第二層的-static-第四層的-required","衝突一：第二層的 static ⛔ 第四層的 required",[24,827,828,831,834],{},[27,829,830],{},"物理現實： static（大樓公設）與 required（強迫住戶裝潢）絕對不能同時出現！",[27,832,833],{},"原因： required 是現代 C# 為了強迫外部在 new 物件實體時，必須用大括號填入數值。但 static 成員根本不需要 new 就能用，所以系統會當場錯亂。",[27,835,836],{},"結論： 只要開了 static 燈號，第四層的 required 燈號就會被強制拔除。",[70,838,840],{"id":839},"衝突二第三層的-readonly-第四層的-required針對欄位-field","衝突二：第三層的 readonly ⛔ 第四層的 required（針對欄位 Field）",[24,842,843,846,849],{},[27,844,845],{},"物理現實： 如果你宣告的是一個「欄位（Field）」，readonly 和 required 不能共存！",[27,847,848],{},"原因： readonly 規定變數只能在「建構子內部」出生時賦值；但 required 卻是強迫別人在「建構子外部的物件初始化器 {}」填值，兩者在執行時間線上會打架。",[27,850,851],{},"現代 C# 的標準解法（改用屬性 Property）：\n如果你希望一個屬性既是強迫填值、填完後又是唯讀不可修改的，在現代 C# 裡我們不寫 readonly，而是會結合第四層寫成這樣：",[37,853,857],{"className":854,"code":855,"language":856,"meta":42,"style":42},"language-csharp! shiki shiki-themes github-light github-dark","\u002F\u002F 完美的現代 C# 組合：權限(1) ➔ 契約(4) ➔ 形態 ➔ 名字 ➔ { get; 狀態(3) }\npublic required string SystemToken { get; init; }\n","csharp!",[44,858,859,864],{"__ignoreMap":42},[47,860,861],{"class":49,"line":50},[47,862,863],{},"\u002F\u002F 完美的現代 C# 組合：權限(1) ➔ 契約(4) ➔ 形態 ➔ 名字 ➔ { get; 狀態(3) }\n",[47,865,866],{"class":49,"line":101},[47,867,868],{},"public required string SystemToken { get; init; }\n",[20,870,58],{},[15,872,873],{"id":873},"關於權限",[587,875,876,899],{},[590,877,878],{},[593,879,880,883,887,890,893,896],{},[596,881,882],{"align":598},"權限修飾詞",[596,884,886],{"align":885},"center","同一個 Class 內",[596,888,889],{"align":885},"同專案的子類別 (兒子)",[596,891,892],{"align":885},"同專案的其他 Class (鄰居)",[596,894,895],{"align":885},"不同專案的子類別 (外地兒子)",[596,897,898],{"align":885},"不同專案的其他 Class (外星人)",[621,900,901,922,941,960,979,998],{},[593,902,903,910,913,916,918,920],{},[626,904,905],{"align":598},[405,906,907],{},[44,908,909],{},"private",[626,911,912],{"align":885},"🟢",[626,914,915],{"align":885},"❌",[626,917,915],{"align":885},[626,919,915],{"align":885},[626,921,915],{"align":885},[593,923,924,931,933,935,937,939],{},[626,925,926],{"align":598},[405,927,928],{},[44,929,930],{},"private protected",[626,932,912],{"align":885},[626,934,912],{"align":885},[626,936,915],{"align":885},[626,938,915],{"align":885},[626,940,915],{"align":885},[593,942,943,950,952,954,956,958],{},[626,944,945],{"align":598},[405,946,947],{},[44,948,949],{},"protected",[626,951,912],{"align":885},[626,953,912],{"align":885},[626,955,915],{"align":885},[626,957,912],{"align":885},[626,959,915],{"align":885},[593,961,962,969,971,973,975,977],{},[626,963,964],{"align":598},[405,965,966],{},[44,967,968],{},"internal",[626,970,912],{"align":885},[626,972,912],{"align":885},[626,974,912],{"align":885},[626,976,915],{"align":885},[626,978,915],{"align":885},[593,980,981,988,990,992,994,996],{},[626,982,983],{"align":598},[405,984,985],{},[44,986,987],{},"protected internal",[626,989,912],{"align":885},[626,991,912],{"align":885},[626,993,912],{"align":885},[626,995,912],{"align":885},[626,997,915],{"align":885},[593,999,1000,1007,1009,1011,1013,1015],{},[626,1001,1002],{"align":598},[405,1003,1004],{},[44,1005,1006],{},"public",[626,1008,912],{"align":885},[626,1010,912],{"align":885},[626,1012,912],{"align":885},[626,1014,912],{"align":885},[626,1016,912],{"align":885},[20,1018,58],{},[15,1020,1021],{"id":1021},"關於static",[64,1023,1024],{},[20,1025,1026],{},"static 的物理本質就是「記憶體上的共用公設」！它不需要 new，因為它在程式一開車時就已經物理性地黏在記憶體核心裡了。",[70,1028,1030],{"id":1029},"用大樓公設一秒看穿-static","用「大樓公設」一秒看穿 static",[533,1032,1033],{},[27,1034,1035],{},"沒有寫 static（實例成員）➔ 它是「住戶家裡的個人馬桶」",[37,1037,1039],{"className":39,"code":1038,"language":41,"meta":42,"style":42},"var roomA = new ConnectionSettings();\nroomA.Port = 8080; \u002F\u002F 這是 roomA 家的馬桶，跟 roomB 沒關係\n",[44,1040,1041,1046],{"__ignoreMap":42},[47,1042,1043],{"class":49,"line":50},[47,1044,1045],{},"var roomA = new ConnectionSettings();\n",[47,1047,1048],{"class":49,"line":101},[47,1049,1050],{},"roomA.Port = 8080; \u002F\u002F 這是 roomA 家的馬桶，跟 roomB 沒關係\n",[533,1052,1053],{"start":101},[27,1054,1055],{},"加上了 static（靜態成員）➔ 它是「大樓大廳的公共廁所」",[37,1057,1059],{"className":39,"code":1058,"language":41,"meta":42,"style":42},"\u002F\u002F 🚀 看好！完全不需要 new Console()！直接呼叫大樓名字 Console 就能點火！\nConsole.WriteLine(\"我是大樓公廁，誰都可以直接用我！\");\n",[44,1060,1061,1066],{"__ignoreMap":42},[47,1062,1063],{"class":49,"line":50},[47,1064,1065],{},"\u002F\u002F 🚀 看好！完全不需要 new Console()！直接呼叫大樓名字 Console 就能點火！\n",[47,1067,1068],{"class":49,"line":101},[47,1069,1070],{},"Console.WriteLine(\"我是大樓公廁，誰都可以直接用我！\");\n",[20,1072,58],{},[15,1074,1075],{"id":1075},"舉例",[37,1077,1079],{"className":39,"code":1078,"language":41,"meta":42,"style":42},"public static readonly double Pi = 3.14159;\n",[44,1080,1081],{"__ignoreMap":42},[47,1082,1083],{"class":49,"line":50},[47,1084,1078],{},[37,1086,1090],{"className":1087,"code":1088,"language":1089,"meta":42,"style":42},"language-Plaintext＝ shiki shiki-themes github-light github-dark","［第一層：權限］ ➔ ［第二層：空間］ ➔ ［第三層：狀態］ ➔ ［型別］ ➔ ［名字］\n    public          static         readonly       double      Pi = 3.14;\n  (全宇宙可看)     (大樓公設免new)  (灌漿鎖死不能改)\n","Plaintext＝",[44,1091,1092,1097,1102],{"__ignoreMap":42},[47,1093,1094],{"class":49,"line":50},[47,1095,1096],{},"［第一層：權限］ ➔ ［第二層：空間］ ➔ ［第三層：狀態］ ➔ ［型別］ ➔ ［名字］\n",[47,1098,1099],{"class":49,"line":101},[47,1100,1101],{},"    public          static         readonly       double      Pi = 3.14;\n",[47,1103,1104],{"class":49,"line":107},[47,1105,1106],{},"  (全宇宙可看)     (大樓公設免new)  (灌漿鎖死不能改)\n",[20,1108,58],{},[15,1110,1111],{"id":1111},"補充",[478,1113],{},[10,1115,1117],{"id":1116},"五建構子","五、建構子",[64,1119,1120],{},[20,1121,1122],{},"建構子不是必要的：你完全可以不寫。只要不寫，類別就會自帶一個隱形的「無參數刷零建構子」。\n它的名字有沒有跟外側的 class 或 struct 一模一樣",[15,1124,1125],{"id":1125},"class",[37,1127,1129],{"className":39,"code":1128,"language":41,"meta":42,"style":42},"public class Customer\n{\n    public string Name { get; set; }\n\n    public Customer(string name) => Name = name;\n}\n",[44,1130,1131,1136,1140,1145,1149,1154],{"__ignoreMap":42},[47,1132,1133],{"class":49,"line":50},[47,1134,1135],{},"public class Customer\n",[47,1137,1138],{"class":49,"line":101},[47,1139,141],{},[47,1141,1142],{"class":49,"line":107},[47,1143,1144],{},"    public string Name { get; set; }\n",[47,1146,1147],{"class":49,"line":113},[47,1148,220],{"emptyLinePlaceholder":219},[47,1150,1151],{"class":49,"line":154},[47,1152,1153],{},"    public Customer(string name) => Name = name;\n",[47,1155,1156],{"class":49,"line":160},[47,1157,116],{},[15,1159,1160],{"id":1160},"struct",[37,1162,1164],{"className":39,"code":1163,"language":41,"meta":42,"style":42},"struct ConnectionSettings\n{\n    public string Host { get; set; }\n    public int Port { get; set; }\n    public int MaxRetries { get; set; }\n\n    public ConnectionSettings()\n    {\n        Host = \"localhost\";\n        Port = 8080;\n        MaxRetries = 3;\n    }\n}\n",[44,1165,1166,1171,1175,1180,1185,1190,1194,1199,1203,1208,1213,1218,1222],{"__ignoreMap":42},[47,1167,1168],{"class":49,"line":50},[47,1169,1170],{},"struct ConnectionSettings\n",[47,1172,1173],{"class":49,"line":101},[47,1174,141],{},[47,1176,1177],{"class":49,"line":107},[47,1178,1179],{},"    public string Host { get; set; }\n",[47,1181,1182],{"class":49,"line":113},[47,1183,1184],{},"    public int Port { get; set; }\n",[47,1186,1187],{"class":49,"line":154},[47,1188,1189],{},"    public int MaxRetries { get; set; }\n",[47,1191,1192],{"class":49,"line":160},[47,1193,220],{"emptyLinePlaceholder":219},[47,1195,1196],{"class":49,"line":166},[47,1197,1198],{},"    public ConnectionSettings()\n",[47,1200,1201],{"class":49,"line":172},[47,1202,163],{},[47,1204,1205],{"class":49,"line":178},[47,1206,1207],{},"        Host = \"localhost\";\n",[47,1209,1210],{"class":49,"line":256},[47,1211,1212],{},"        Port = 8080;\n",[47,1214,1215],{"class":49,"line":261},[47,1216,1217],{},"        MaxRetries = 3;\n",[47,1219,1220],{"class":49,"line":267},[47,1221,175],{},[47,1223,1224],{"class":49,"line":273},[47,1225,116],{},[37,1227,1229],{"className":39,"code":1228,"language":41,"meta":42,"style":42},"public class Robot\n{\n    public string Model { get; set; }\n\n    \u002F\u002F 👑 尊貴建構子 A（正統流派）\n    \u002F\u002F 特徵：名字叫 Robot (跟外側 class 同名)，而且前面「完全沒有回傳型別」！\n    public Robot(string model) => Model = model;\n\n    \u002F\u002F ❌ 普通方法 B（魚目混珠流派）\n    \u002F\u002F 特徵：長得一模一樣，但前面加了 \"void\" (代表它會回傳空值)！\n    \u002F\u002F 物理真相：編譯器大喊：「你雖然叫 Robot，但你宣告了回傳型別 void！你只是個剛好跟大樓同名的普通方法，不准當建構子！」\n    public void Robot(string model) => Model = model;\n\n    \u002F\u002F ❌ 普通方法 C（路人甲流派）\n    \u002F\u002F 特徵：名字叫 Initialize，跟 class 不同名。\n    \u002F\u002F 物理真相：這就是個純度 100% 的普通方法。\n    public void Initialize(string model) => Model = model;\n}\n",[44,1230,1231,1236,1240,1245,1249,1254,1259,1264,1268,1273,1278,1283,1288,1292,1297,1302,1307,1312],{"__ignoreMap":42},[47,1232,1233],{"class":49,"line":50},[47,1234,1235],{},"public class Robot\n",[47,1237,1238],{"class":49,"line":101},[47,1239,141],{},[47,1241,1242],{"class":49,"line":107},[47,1243,1244],{},"    public string Model { get; set; }\n",[47,1246,1247],{"class":49,"line":113},[47,1248,220],{"emptyLinePlaceholder":219},[47,1250,1251],{"class":49,"line":154},[47,1252,1253],{},"    \u002F\u002F 👑 尊貴建構子 A（正統流派）\n",[47,1255,1256],{"class":49,"line":160},[47,1257,1258],{},"    \u002F\u002F 特徵：名字叫 Robot (跟外側 class 同名)，而且前面「完全沒有回傳型別」！\n",[47,1260,1261],{"class":49,"line":166},[47,1262,1263],{},"    public Robot(string model) => Model = model;\n",[47,1265,1266],{"class":49,"line":172},[47,1267,220],{"emptyLinePlaceholder":219},[47,1269,1270],{"class":49,"line":178},[47,1271,1272],{},"    \u002F\u002F ❌ 普通方法 B（魚目混珠流派）\n",[47,1274,1275],{"class":49,"line":256},[47,1276,1277],{},"    \u002F\u002F 特徵：長得一模一樣，但前面加了 \"void\" (代表它會回傳空值)！\n",[47,1279,1280],{"class":49,"line":261},[47,1281,1282],{},"    \u002F\u002F 物理真相：編譯器大喊：「你雖然叫 Robot，但你宣告了回傳型別 void！你只是個剛好跟大樓同名的普通方法，不准當建構子！」\n",[47,1284,1285],{"class":49,"line":267},[47,1286,1287],{},"    public void Robot(string model) => Model = model;\n",[47,1289,1290],{"class":49,"line":273},[47,1291,220],{"emptyLinePlaceholder":219},[47,1293,1294],{"class":49,"line":278},[47,1295,1296],{},"    \u002F\u002F ❌ 普通方法 C（路人甲流派）\n",[47,1298,1299],{"class":49,"line":284},[47,1300,1301],{},"    \u002F\u002F 特徵：名字叫 Initialize，跟 class 不同名。\n",[47,1303,1304],{"class":49,"line":290},[47,1305,1306],{},"    \u002F\u002F 物理真相：這就是個純度 100% 的普通方法。\n",[47,1308,1309],{"class":49,"line":295},[47,1310,1311],{},"    public void Initialize(string model) => Model = model;\n",[47,1313,1314],{"class":49,"line":301},[47,1315,116],{},[15,1317,1319],{"id":1318},"類別就會自帶一個隱形的無參數刷零建構子","類別就會自帶一個隱形的「無參數刷零建構子」",[37,1321,1323],{"className":39,"code":1322,"language":41,"meta":42,"style":42},"\u002F\u002F 假設這是你寫的，沒有任何的建構子\npublic class Member\n{\n    public string Account { get; set; }\n    public string Email { get; set; }\n    public int Age { get; set; }\n}\n\n\u002F\u002F------------------------\n\n\u002F\u002F 🟢 微軟一輩子只會幫你自動補上這個「全空殼」：\npublic Member()\n{\n    \u002F\u002F 裡面是空的！一句話都不說！\n    \u002F\u002F 讓你的 Account 變 null，Email 變 null，Age 變 0\n}\n\n",[44,1324,1325,1330,1335,1339,1344,1349,1354,1358,1362,1367,1371,1376,1381,1385,1390,1395],{"__ignoreMap":42},[47,1326,1327],{"class":49,"line":50},[47,1328,1329],{},"\u002F\u002F 假設這是你寫的，沒有任何的建構子\n",[47,1331,1332],{"class":49,"line":101},[47,1333,1334],{},"public class Member\n",[47,1336,1337],{"class":49,"line":107},[47,1338,141],{},[47,1340,1341],{"class":49,"line":113},[47,1342,1343],{},"    public string Account { get; set; }\n",[47,1345,1346],{"class":49,"line":154},[47,1347,1348],{},"    public string Email { get; set; }\n",[47,1350,1351],{"class":49,"line":160},[47,1352,1353],{},"    public int Age { get; set; }\n",[47,1355,1356],{"class":49,"line":166},[47,1357,116],{},[47,1359,1360],{"class":49,"line":172},[47,1361,220],{"emptyLinePlaceholder":219},[47,1363,1364],{"class":49,"line":178},[47,1365,1366],{},"\u002F\u002F------------------------\n",[47,1368,1369],{"class":49,"line":256},[47,1370,220],{"emptyLinePlaceholder":219},[47,1372,1373],{"class":49,"line":261},[47,1374,1375],{},"\u002F\u002F 🟢 微軟一輩子只會幫你自動補上這個「全空殼」：\n",[47,1377,1378],{"class":49,"line":267},[47,1379,1380],{},"public Member()\n",[47,1382,1383],{"class":49,"line":273},[47,1384,141],{},[47,1386,1387],{"class":49,"line":278},[47,1388,1389],{},"    \u002F\u002F 裡面是空的！一句話都不說！\n",[47,1391,1392],{"class":49,"line":284},[47,1393,1394],{},"    \u002F\u002F 讓你的 Account 變 null，Email 變 null，Age 變 0\n",[47,1396,1397],{"class":49,"line":290},[47,1398,116],{},[20,1400,1401],{},"變成這樣",[37,1403,1405],{"className":39,"code":1404,"language":41,"meta":42,"style":42},"public class Member\n{\n    public string Account { get; set; }\n    public string Email { get; set; }\n    public int Age { get; set; }\n    \n    public Member(){}    \n}\n\n",[44,1406,1407,1411,1415,1419,1423,1427,1432,1437],{"__ignoreMap":42},[47,1408,1409],{"class":49,"line":50},[47,1410,1334],{},[47,1412,1413],{"class":49,"line":101},[47,1414,141],{},[47,1416,1417],{"class":49,"line":107},[47,1418,1343],{},[47,1420,1421],{"class":49,"line":113},[47,1422,1348],{},[47,1424,1425],{"class":49,"line":154},[47,1426,1353],{},[47,1428,1429],{"class":49,"line":160},[47,1430,1431],{},"    \n",[47,1433,1434],{"class":49,"line":166},[47,1435,1436],{},"    public Member(){}    \n",[47,1438,1439],{"class":49,"line":172},[47,1440,116],{},[20,1442,1443],{},"如果要使用的話",[37,1445,1447],{"className":39,"code":1446,"language":41,"meta":42,"style":42},"var a = new Member() { Account = \"charlie\", Email = \"charlie's mail\" };\n\n### 沒有Age的話，會帶入初始值0\n",[44,1448,1449,1454,1458],{"__ignoreMap":42},[47,1450,1451],{"class":49,"line":50},[47,1452,1453],{},"var a = new Member() { Account = \"charlie\", Email = \"charlie's mail\" };\n",[47,1455,1456],{"class":49,"line":101},[47,1457,220],{"emptyLinePlaceholder":219},[47,1459,1460],{"class":49,"line":107},[47,1461,1462],{},"### 沒有Age的話，會帶入初始值0\n",[15,1464,1466],{"id":1465},"寫法","寫法：",[478,1468],{},[10,1470,1472],{"id":1471},"六靜態static","六、靜態（Static）",[64,1474,1475],{},[20,1476,1477],{},"在硬體實體記憶體（RAM）裡的「空間與位置」，在程式啟動期間是絕對固定、無法被回收的！",[15,1479,1481],{"id":1480},"記憶體的三種配置宿命","記憶體的三種「配置宿命」",[20,1483,1484],{},"在硬體底層，當你的程式（.exe 或 Web API）被載入到 RAM 執行時，作業系統會把記憶體劃分成三種管理模式。這就是為什麼它們的名字長這樣：",[37,1486,1488],{"className":709,"code":1487,"language":711,"meta":42,"style":42},"💾 你的實體記憶體 (RAM)\n├── 🟩 [靜態配置區] ── 啟動時直接「圈地封王」，位置固定，與程式同生共死 (Static)\n├── 🟦 [Stack 棧區]  ── 隨著函式進出，CPU 指針上下跳動，用完秒回收 (Automatic)\n└── 🟨 [Heap 堆區]   ── 程式執行時動態去申請一塊地，不用了派垃圾車回收 (Dynamic)\n",[44,1489,1490,1495,1500,1505],{"__ignoreMap":42},[47,1491,1492],{"class":49,"line":50},[47,1493,1494],{},"💾 你的實體記憶體 (RAM)\n",[47,1496,1497],{"class":49,"line":101},[47,1498,1499],{},"├── 🟩 [靜態配置區] ── 啟動時直接「圈地封王」，位置固定，與程式同生共死 (Static)\n",[47,1501,1502],{"class":49,"line":107},[47,1503,1504],{},"├── 🟦 [Stack 棧區]  ── 隨著函式進出，CPU 指針上下跳動，用完秒回收 (Automatic)\n",[47,1506,1507],{"class":49,"line":113},[47,1508,1509],{},"└── 🟨 [Heap 堆區]   ── 程式執行時動態去申請一塊地，不用了派垃圾車回收 (Dynamic)\n",[20,1511,1512],{},"=========",[15,1514,1516],{"id":1515},"靜態配置static-allocation-就是你說的-static","靜態配置（Static Allocation）➔ 就是你說的 static",[20,1518,1519],{},"硬體行為： 當編譯器在打包你的程式碼時，看到 private static int currentID;，它就會在二進位檔案的標頭寫下：「這支程式開機時，請直接在 RAM 裡挖出一個固定的 4 位元組格子給它。」",[20,1521,1522],{},"物理現實： 程式一啟動，作業系統立刻把這個格子的物理地址（例如 0x00FF12）死死分配出去。在程式關閉前，這塊物理空間絕對不會釋放，沒有人能把它回收還給作業系統。因為它的地址和大小「永遠靜止不變」，所以這套機制在晶片層面就被稱為 「靜態配置」。",[20,1524,1512],{},[15,1526,1528],{"id":1527},"自動配置automatic-allocation-就是-stack","自動配置（Automatic Allocation）➔ 就是 Stack",[20,1530,1531],{},"硬體行為： 當你呼叫一個函式，CPU 的暫存器指針（Stack Pointer）就會往下移動，在 RAM 裡開闢一塊臨時空間。",[20,1533,1534],{},"物理現實： 當你的函式一執行完畢（遇到大括號結束 }），CPU 指針一彈回去，剛剛開闢的物理空間在硬體層面上就當場被標記為「可回收\u002F已釋放」。它隨著代碼執行「自動、瞬間」回收，速度極快。",[20,1536,1512],{},[15,1538,1540],{"id":1539},"動態配置dynamic-allocation-就是平民-heap","動態配置（Dynamic Allocation）➔ 就是平民 Heap",[20,1542,1543],{},"硬體行為： 你在程式執行到一半，突然寫了 new WorkItem()，程式才會臨時跑去跟作業系統大喊：「報告長官！現在使用者突然點了按鈕，請立刻在 Heap 區隨機撥一塊乾淨的土地給我蓋大樓！」",[20,1545,1546],{},"物理現實： 這塊土地的地址是動態決定的（每次 new 都不同）。當你的大樓沒人用了，C# 的垃圾回收機制（GC）就會啟動，把這塊動態申請來的物理空間擦乾淨，還給作業系統。",[20,1548,1512],{},[15,1550,1552],{"id":1551},"記憶體世界的生存與特權排行榜","記憶體世界的「生存與特權」排行榜",[20,1554,1512],{},[15,1556,1558],{"id":1557},"程式碼世界的存取權限access-modifiers大小","程式碼世界的「存取權限（Access Modifiers）」大小",[478,1560],{},[1562,1563,1564],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":42,"searchDepth":101,"depth":101,"links":1566},[1567,1573,1577,1584,1592,1598],{"id":12,"depth":101,"text":13,"children":1568},[1569,1570,1571,1572],{"id":17,"depth":107,"text":18},{"id":61,"depth":107,"text":62},{"id":185,"depth":107,"text":186},{"id":428,"depth":107,"text":428},{"id":482,"depth":101,"text":483,"children":1574},[1575,1576],{"id":486,"depth":107,"text":487},{"id":501,"depth":107,"text":502},{"id":526,"depth":101,"text":527,"children":1578},[1579,1580,1581,1582,1583],{"id":530,"depth":107,"text":531},{"id":543,"depth":107,"text":544},{"id":558,"depth":107,"text":559},{"id":568,"depth":107,"text":568},{"id":584,"depth":107,"text":585},{"id":702,"depth":101,"text":703,"children":1585},[1586,1587,1588,1589,1590,1591],{"id":706,"depth":107,"text":706},{"id":821,"depth":107,"text":821},{"id":873,"depth":107,"text":873},{"id":1021,"depth":107,"text":1021},{"id":1075,"depth":107,"text":1075},{"id":1111,"depth":107,"text":1111},{"id":1116,"depth":101,"text":1117,"children":1593},[1594,1595,1596,1597],{"id":1125,"depth":107,"text":1125},{"id":1160,"depth":107,"text":1160},{"id":1318,"depth":107,"text":1319},{"id":1465,"depth":107,"text":1466},{"id":1471,"depth":101,"text":1472,"children":1599},[1600,1601,1602,1603,1604,1605],{"id":1480,"depth":107,"text":1481},{"id":1515,"depth":107,"text":1516},{"id":1527,"depth":107,"text":1528},{"id":1539,"depth":107,"text":1540},{"id":1551,"depth":107,"text":1552},{"id":1557,"depth":107,"text":1558},"backend","2026-08-22",false,"md",{},"\u002Fnotes\u002Fsync\u002Fcsharp-01",{"title":5,"description":22},"C#\u002F易混淆概念\u002F易混淆概念01.md","notes\u002Fsync\u002Fcsharp-易混淆概念-易混淆概念01",[1616,1617],"C#","Concepts","dtNraGKifhA7u6b_gTCZcOwUWN3cjavKcf9g51k3FoE",1788767747471]