我想重寫ASP.NET JavaScriptSerializer類的Serialize方法。沒什麼特別,我只是想對從.NET返回的序列化字符串做一些額外的後處理。擴展一個沒有實現接口的類
不幸的是,這個類的方法都沒有被聲明爲虛擬的,而且類本身並不是從接口或抽象類派生的(看起來像是一個奇怪的疏忽,因爲有多少核心.NET Framework類是爲擴展而設計的) 。
根據我對這個主題所做的一些閱讀,看起來我有幾個選項可供選擇。
創建擴展方法。我不是這個選項的忠實粉絲,因爲它涉及創建一個新的方法(編譯器不允許兩次使用相同的名稱/簽名),類消費者需要注意。
從JavaScriptSerializer派生一個具有完全相同簽名的新類。由於JavaScriptSerializer沒有虛擬方法,我會在每個方法/屬性聲明中使用「new」關鍵字來執行方法隱藏。我認爲這個選項被認爲是一個裝飾模式?
創建一個名爲IJavaScriptSerializer的新接口,該接口與JavaScriptSerializer具有相同的簽名。將我的代碼中的所有引用移除到JavaScriptSerializer,並替換爲對新創建的接口的引用。
我很想聽聽其他方法和每種方法的優缺點。
感謝您花時間閱讀。
這是我的第400個答案! – SLaks 2009-10-20 02:24:48
現在你有超過9000個答案! :) 10,555是確切的。感謝您的貢獻! – 2012-10-09 18:56:56