可以說我有2個類類型TEmployee(具有屬性A,B)和TDept(具有屬性C,D)。然後,我從做後裔的TList像這樣一類:訪問通用類型的成員
TMyCcontainer<T>=class(TList<T>)
所以我可以創建TMyCcontainer的情況,並參照TEmployee或TDept填寫。在我的TMyCcontainer類中,是否有訪問TEmployee的屬性A,B或TDept的屬性C,D的方法?
當然,這種類型是通用的,所以它不會顯示。這就是我一直對泛型的問題 - 也許我錯誤地使用它們。我最近學會了abaout約束,並認爲我已經發現了我已經失蹤....
所以我創建了2個接口,說IEmployee和IDept,使我的2 orig類es是interfaceobjects,並把我的contraint我TLIST即
TMyCcontainer<T:IEmployee,IDept>=class(TList<T>)
當然,我很快就失望了,因爲這是說你必須實現在任何類型的我把我一般從TList(TMyContainer)這些接口的,而我只是想ONE在任何特定實例在另一個例子中是另一個。我將不得不在我的TDept類中實現IEmployee和IDept,這不是我想要的obv。
有沒有什麼好的方法來訪問泛型容器中的類型的成員?或者我不應該使用泛型來做這種事情。 Ty
Ty Mason。我一直在做一些完全愚蠢的事情 - 試圖把代碼放到TMyContainer中,並以某種方式訪問那裏的屬性,儘管T的類型是未知的。我相信我應該爲每個我想放入TMyContainer的已知類型創建另一個來自TMyContainer的類,從而使我能夠訪問類型屬性並同時維護我的代碼的封裝。 – csharpdefector 2010-07-28 15:38:03
@Csharpdefector:是的,確切地說。 – 2010-07-28 15:39:50
如果屬性聲明爲已發佈,或者如果您使用啓用了擴展RTTI的D2010 +,則可以使用RTTI訪問屬性,而無需派生單獨的類。 – 2012-06-13 23:00:01