我做了一個類來生成2個類似但卻非常不同的報表。爲此,我使用了我在此處找到的模式:https://stackoverflow.com/a/29907649/3410196 它使用抽象基類,它包含帶有公共構造函數的私有派生類,所以其他代碼實際上不會訪問派生類的構造函數,並且只能使用static Create()
方法創建對象。具有私人派生類的抽象類:實現一些方法
現在我面臨一個問題: 一切工作正常,我可以導出報告等,但現在我已經能夠出口的報告一個以不同的格式。有沒有什麼辦法可以讓這個方法通過基類只爲那個派生類訪問?否則,我將不得不throw new NotImplementedException()
或強迫我的用戶使用這樣的事情:
//Is actually multiReport (multireport:report)
Report report = Report.Create(...);
MemoryStream stream = (report as multireport).ExportOtherFormat();
我懷疑這是可能的,但也許有辦法!
創建一個類,其職責是導出報告。例如,你可以有一個CSV導出器,一個XML導出器等。該類將把你的報表基類作爲參數。報告的創建和導出可能是兩個獨立的責任,所以他們應該分屬不同的類別。 –
事實上,我應該從一開始就這樣實施它,那會更好。但是現在已經太晚了,因爲太多的應用程序已經在使用我的庫了。獲得的經驗我猜 –
難道你不能只是添加另一種方法到你的庫,需要一個IExporter作爲參數?然後,您可以創建一些出口商,然後您的圖書館的用戶可以通過傳遞相應的出口商實施說明他們希望如何導出?例如,公共無效出口(IExporter出口商) –