在看 Framework Design Guidelines 時,讀到官方把 Nullable<T> 改成 readonly 的過程中,曾意外引發一個不易察覺的問題。也因此我才注意到防禦性複製(defensive copy)這個議題,以及它帶來的陷阱。
相關討論串在 dotnet/corefx PR #24997
在看 Framework Design Guidelines 時,讀到官方把 Nullable<T> 改成 readonly 的過程中,曾意外引發一個不易察覺的問題。也因此我才注意到防禦性複製(defensive copy)這個議題,以及它帶來的陷阱。
相關討論串在 dotnet/corefx PR #24997
在 .NET Core 做 DI 時,大多習慣用建構子注入(Constructor Injection)。但如果依賴的 implementation factory 裡面藏著高成本的初始化,就可能在注入服務時初始化非必要的高成本依賴,進而造成效能問題。這篇整理問題成因與幾個可行的解法。
在典型的分層式架構下,遇上複雜的業務邏輯時,服務層的不同服務間仍然很容易產生依賴。這篇文章會循序漸進地說明依賴關係的問題,以及如何使用 Rx.NET(Reactive Extensions for .NET)優雅地解耦這些依賴。
NLog 是一個在 .NET 開發領域相當受歡迎的 log 管理工具,因為操作簡單、功能齊全,且具備完善的歸檔與壓縮機制。然而,前陣子我們團隊因為 NLog 的檔案管理策略設定不當,導致線上服務在歸檔過程中完全卡住,無法處理任何請求。以這個實際問題為契機,我想紀錄一下使用 NLog 管理 log 時的正確策略、可能的風險,以及設定時的考量,以避免日後再度踩坑。
C# 的實值型別與參考型別雖然是入門主題,但實際上可以深入探討,涉及的範疇也相當廣泛。本文將從面試的角度切入,逐步深入說明相關差異與應用情境。
LINQ 語法可以用 Method Syntax 和 Query Syntax 來表示,在應用上我通常會視情境決定如何使用與搭配,但一直沒有整理過選擇的依據。今天剛好有同事問到,就趁這個機會整理一下。
迭代器模式(Iterator Pattern)是一種常見的設計模式,相關實作和說明在網路上隨處可見。在 C# 中,這個模式是藉由列舉器(Enumerator)來實現的。除了直接操作列舉器,C# 還提供了多種語法糖使開發更加便捷。本篇文章將不再贅述迭代器模式的理論,而是聚焦於 C# 提供的介面與語法糖,詳細說明列舉器在 C# 中的實際應用。
閉包(Closure)是 C# 中的一種常用特性,允許方法內部引用其外部作用域的變數,進而提高程式的靈活性。然而,如果對閉包及變數捕捉(Capture)機制的理解不夠深入,可能會導致難以預期的錯誤。本文將介紹閉包與變數捕捉機制,並展示常見的陷阱及解決方案。
LINQ (Language Integrated Query) 的延遲執行機制 (Deferred Execution) 是其一大特色,讓查詢表達式在實際迭代前都不會執行。然而,如果不加注意,可能會因誤用而引發難以察覺的效能問題。本文將探討 LINQ 的延遲執行機制及其潛在的誤用風險,並提供實際程式碼範例說明。
C# 的非同步程式設計是一個相當龐大且複雜的主題,甚至可以寫成整本專書。由於這也是面試中的常見題目,本文將嘗試從面試的角度整理非同步開發的要點。