[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"note-\u002Fnotes\u002Fsync\u002Fcsharp-object":3},{"id":4,"title":5,"body":6,"category":292,"date":293,"description":12,"draft":294,"extension":295,"meta":296,"navigation":83,"path":297,"seo":298,"sourcePath":299,"stem":300,"tags":301,"__hash__":304},"notes\u002Fnotes\u002Fsync\u002Fcsharp-物件-物件object.md","物件Object",{"type":7,"value":8,"toc":284},"minimark",[9,13,17,22,25,40,44,47,55,97,103,121,171,175,178,202,206,277,280],[10,11,12],"p",{},"雖然在js跟cshsarp都叫 object，而且在各自的語言裡都隱約有「代表全部」的身影，但在底層的物理結構與生存哲學上，兩者有著天翻地覆的差別。",[14,15,16],"h2",{"id":16},"簡介",[18,19,21],"h3",{"id":20},"_1-javascript-的-object-沒有地基隨時能變形的百寶袋","1. JavaScript 的 object ——「沒有地基、隨時能變形的百寶袋」",[10,23,24],{},"在 JavaScript 裡，object 幾乎代表了全部\n（除了基本型別以外，連 Array、Function 底層都是 object）。",[26,27,28,37],"ul",{},[29,30,31,32,36],"li",{},"物理真相：JS 的物件在底層（V8引擎）本質上是一個",[33,34,35],"code",{},"動態的雜湊表","（Hash Table \u002F Map）。它是一個空的百寶袋。",[29,38,39],{},"生存哲學：它沒有固定的藍圖（Class）。你隨時可以用 obj.age = 25 憑空塞一個新欄位進去。它代表「全部」，是因為它像黏土一樣，你捏成什麼，它就是什麼。",[18,41,43],{"id":42},"_2-c-的-object-鐵打的萬物之源最模糊的最高祖先","2. C# 的 object ——「鐵打的萬物之源、最模糊的最高祖先」",[10,45,46],{},"在 C# 的世界裡，object（也就是系統底層的 System.Object）的代表全部，完全是另一種物理邏輯。C# 是強型別語言，講究的是「長幼尊卑的嚴格繼承樹」。",[26,48,49,52],{},[29,50,51],{},"在 C# 中，object 代表全部的意思是：「它是全天下所有型別共同的、最頂層的唯一祖先（至高無上的父類別）。」",[29,53,54],{},"你在 C# 裡寫的任何自訂類別，就算你什麼都不寫，C# 在編譯時都會強迫繼承 object：",[56,57,62],"pre",{"className":58,"code":59,"language":60,"meta":61,"style":61},"language-csharp shiki shiki-themes github-light github-dark","\u002F\u002F 你以為你只是寫了一個簡單的類別：\npublic class Mammal { }\n\n\u002F\u002F 但在電腦眼裡，物理上它其實長這樣（自動繼承）：\npublic class Mammal : System.Object { }\n","csharp","",[33,63,64,72,78,85,91],{"__ignoreMap":61},[65,66,69],"span",{"class":67,"line":68},"line",1,[65,70,71],{},"\u002F\u002F 你以為你只是寫了一個簡單的類別：\n",[65,73,75],{"class":67,"line":74},2,[65,76,77],{},"public class Mammal { }\n",[65,79,81],{"class":67,"line":80},3,[65,82,84],{"emptyLinePlaceholder":83},true,"\n",[65,86,88],{"class":67,"line":87},4,[65,89,90],{},"\u002F\u002F 但在電腦眼裡，物理上它其實長這樣（自動繼承）：\n",[65,92,94],{"class":67,"line":93},5,[65,95,96],{},"public class Mammal : System.Object { }\n",[98,99,100],"blockquote",{},[10,101,102],{},"object boxedMammal = new Mammal() 為什麼可以合理存在?\n因為海獅骨子裡一定也是個 object。",[26,104,105],{},[29,106,107,108,111,112,111,115,111,118],{},"4 個最基本的功能\n*    ",[33,109,110],{},"ToString()","\n*    ",[33,113,114],{},"Equals(object obj)",[33,116,117],{},"GetType()",[33,119,120],{},"GetHashCode()",[56,122,126],{"className":123,"code":124,"language":125,"meta":61,"style":61},"language-Plaintext shiki shiki-themes github-light github-dark","【boxedMammal 的操作介面】\n ┌────────────────────────┐\n ├─ Equals()              │ ───> 點得出來（老祖宗給的）\n ├─ GetHashCode()         │ ───> 點得出來（老祖宗給的）\n ├─ GetType()             │ ───> 點得出來（老祖宗給的）\n ├─ ToString()            │ ───> 點得出來（老祖宗給的）\n └────────────────────────┘\n ❌ .Name ───> 「查無此功能！」因為老祖宗根本不知道什麼是 Name。\n","Plaintext",[33,127,128,133,138,143,148,153,159,165],{"__ignoreMap":61},[65,129,130],{"class":67,"line":68},[65,131,132],{},"【boxedMammal 的操作介面】\n",[65,134,135],{"class":67,"line":74},[65,136,137],{}," ┌────────────────────────┐\n",[65,139,140],{"class":67,"line":80},[65,141,142],{}," ├─ Equals()              │ ───> 點得出來（老祖宗給的）\n",[65,144,145],{"class":67,"line":87},[65,146,147],{}," ├─ GetHashCode()         │ ───> 點得出來（老祖宗給的）\n",[65,149,150],{"class":67,"line":93},[65,151,152],{}," ├─ GetType()             │ ───> 點得出來（老祖宗給的）\n",[65,154,156],{"class":67,"line":155},6,[65,157,158],{}," ├─ ToString()            │ ───> 點得出來（老祖宗給的）\n",[65,160,162],{"class":67,"line":161},7,[65,163,164],{}," └────────────────────────┘\n",[65,166,168],{"class":67,"line":167},8,[65,169,170],{}," ❌ .Name ───> 「查無此功能！」因為老祖宗根本不知道什麼是 Name。\n",[18,172,174],{"id":173},"_3-c-的-object-裝進去之後會集體失憶","3. C# 的 object 裝進去之後會「集體失憶」",[10,176,177],{},"在 JavaScript 裡，你把物件宣告成什麼都無所謂，你隨時能點出裡面的屬性。\n但在 C# 裡，當你把海獅（Mammal）的地址塞進一個 object 變數時，你手裡的放大鏡規格就被降格到了最模糊的 object 級別：",[56,179,181],{"className":58,"code":180,"language":60,"meta":61,"style":61},"object boxedMammal = new Mammal { Name = \"Sea lion\" };\n\n\u002F\u002F ❌ 在 C# 裡這行絕對連編譯都不會過！\nConsole.WriteLine(boxedMammal.Name);\n",[33,182,183,188,192,197],{"__ignoreMap":61},[65,184,185],{"class":67,"line":68},[65,186,187],{},"object boxedMammal = new Mammal { Name = \"Sea lion\" };\n",[65,189,190],{"class":67,"line":74},[65,191,84],{"emptyLinePlaceholder":83},[65,193,194],{"class":67,"line":80},[65,195,196],{},"\u002F\u002F ❌ 在 C# 裡這行絕對連編譯都不會過！\n",[65,198,199],{"class":67,"line":87},[65,200,201],{},"Console.WriteLine(boxedMammal.Name);\n",[18,203,205],{"id":204},"_4-兩者在記憶體與觀念上的終極對照","4. 兩者在記憶體與觀念上的終極對照",[56,207,209],{"className":123,"code":208,"language":125,"meta":61,"style":61},"\n【JavaScript 的 object (動態黏土)】\n變數 obj ───> [ 記憶體百寶袋 ] ───> 隨時可以 .name = \"A\", .age = 10，完全自由。\n\n\n【C# 的 object (嚴格的繼承樹最頂端)】\n                 System.Object (老祖宗：只會 ToString, GetType)\n                       │\n         ┌─────────────┴─────────────┐\n      Mammal (水獺藍圖)            Reptile (蜥蜴藍圖)\n    (.Name 寫在這裡)\n\n 變數 object boxed ───> [ 拿著最頂層的合約 ] ───> 雖然指著 Mammal 實體，但強制不准讀取 .Name！\n\n",[33,210,211,215,220,225,229,233,238,243,248,254,260,266,271],{"__ignoreMap":61},[65,212,213],{"class":67,"line":68},[65,214,84],{"emptyLinePlaceholder":83},[65,216,217],{"class":67,"line":74},[65,218,219],{},"【JavaScript 的 object (動態黏土)】\n",[65,221,222],{"class":67,"line":80},[65,223,224],{},"變數 obj ───> [ 記憶體百寶袋 ] ───> 隨時可以 .name = \"A\", .age = 10，完全自由。\n",[65,226,227],{"class":67,"line":87},[65,228,84],{"emptyLinePlaceholder":83},[65,230,231],{"class":67,"line":93},[65,232,84],{"emptyLinePlaceholder":83},[65,234,235],{"class":67,"line":155},[65,236,237],{},"【C# 的 object (嚴格的繼承樹最頂端)】\n",[65,239,240],{"class":67,"line":161},[65,241,242],{},"                 System.Object (老祖宗：只會 ToString, GetType)\n",[65,244,245],{"class":67,"line":167},[65,246,247],{},"                       │\n",[65,249,251],{"class":67,"line":250},9,[65,252,253],{},"         ┌─────────────┴─────────────┐\n",[65,255,257],{"class":67,"line":256},10,[65,258,259],{},"      Mammal (水獺藍圖)            Reptile (蜥蜴藍圖)\n",[65,261,263],{"class":67,"line":262},11,[65,264,265],{},"    (.Name 寫在這裡)\n",[65,267,269],{"class":67,"line":268},12,[65,270,84],{"emptyLinePlaceholder":83},[65,272,274],{"class":67,"line":273},13,[65,275,276],{}," 變數 object boxed ───> [ 拿著最頂層的合約 ] ───> 雖然指著 Mammal 實體，但強制不准讀取 .Name！\n",[10,278,279],{},"=======================",[281,282,283],"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":61,"searchDepth":74,"depth":74,"links":285},[286],{"id":16,"depth":74,"text":16,"children":287},[288,289,290,291],{"id":20,"depth":80,"text":21},{"id":42,"depth":80,"text":43},{"id":173,"depth":80,"text":174},{"id":204,"depth":80,"text":205},"backend","2026-08-09",false,"md",{},"\u002Fnotes\u002Fsync\u002Fcsharp-object",{"title":5,"description":12},"C#\u002F物件\u002F物件Object.md","notes\u002Fsync\u002Fcsharp-物件-物件object",[302,303],"C#","OOP","RvwMkKdf5cnYDW-VPq_W6WlAgEzakWEORNIEcjsS0ig",1788767747527]