2010-07-15 178 views
0

這是我想達到的。然而,在經過一天半的時間後,我幾乎相信它是不可能完成的。如果有人能告訴我如何做到這一點,我會很感激。家長共享方法從孩子中提取信息並生成孩子?

我有一個.NET父類父與共享方法Fetch()。提取可以採用各種參數來幫助它知道要提取哪些特定記錄,但目前這並不相關。

Fetch()需要知道要查找哪個表以查找其後的記錄。對於繼承Parent的每個子類,該表是不同的。我想將表名保存在一個屬於Child類屬性的字符串中。然後,每個Child都可以提供自己的表名,Parent可以處理所有這些都以相同方式工作的Fetching。

一旦它執行查詢,Fetch()應該有一個DataReader。所有Child類都有一個構造函數,它可以接收DataReader作爲參數,並使用它來生成一個由讀者填充屬性的實例。

我必須強調一件事: Fetch是一種共享方法。如果我從頭開始設計它,我可能不會那麼做,但是因爲它是我重構了一些絕對的代碼,他們去了並且建立了一些絕對的代碼(他可能是或者可能不是我2年前)使用Fetch()作爲每個Child類的一個共享方法的項目(或者說,我希望將這個類作爲這個新Parent的子類),並且確實很好,不必更改那些項目到實例。

編輯: 我正在運行到具體的是,我無法弄清楚如何獲得表名入取(),也不知道怎樣去確定,以調用其上所產生的DataReader的構造函數的子類。

因此,要回顧:

  • 家長共用fetch()方法
  • 方法在Child.Fetch稱爲()
  • 家長會從子表信息
  • 取()知道Child的類名,所以它可以用它讀取的DataReader調用構造函數。

可以這樣做嗎?非常感謝。

+0

Ryan,可以做些什麼?關鍵點在哪裏? – 2010-07-15 21:39:59

+0

嘿,好問題:所以我發現當我在Fetch()裏面的時候,我找不到一種方法從Child中取出表名,這樣我就可以從正確的位置獲取數據,我也不能確定類孩子。我懷疑這是因爲在Shared方法和實例方法中可以做什麼的限制。現在有道理嗎? – Blumer 2010-07-15 21:45:28

回答

0

父可以擁有一個MustOverride屬性,該屬性是Child需要實現的,可以包含表信息。這解決了Parent如何知道每個Child需要查找哪個表的問題,但是您不能擁有MustOverride Shared成員,因此您需要Child的實例才能在Parent中使用。

也許你可以在父類上創建一個基於類型參數的正確類型Child的實例的通用Fetch。給出正確的約束條件當然是可能的。

+0

是的,Shared方法的不可重複性是讓我在這裏絆倒的東西。 在Parent內創建一個Child實例並不壞,但我看不出如何知道要實例化一個實例的子類。思考? – Blumer 2010-07-15 21:52:32

+0

不幸的是,不能不更改Fetch()的方法簽名。或者你必須傳遞給Fetch()一些信息,或者你必須做Fecth()泛型,即Fetch(Of T {New})() – Mark 2010-07-16 18:42:44

0

如果Fetch知道子類的全名,那麼它應該能夠使用reflection來獲得孩子的類型,並且從那裏我會期望你會發現它簡單的航行。