我有一個特殊的需求,我似乎無法弄清楚。我已經做了一些研究,但找不到一個可行的解決方案。獲取適用於任何類別的泛型類型列表
我有一個基類:
public abstract class BaseProvider<T> {}
這個類依次由兩個不同的供應商類繼承:
public sealed class MonkeyProvider<T>
: BaseProvider<MonkeyProvider<T>>
where T
: IAnimalProvider
在界面內IAnimalProvider我公開一個屬性,所有的實現必須派生出來。現在,MonkeyProvider也許DonkeyProvider或類似的東西需要知道所分配的值屬性的根實例就是:
public class JoburgZoo
: IAnimalProvider
{
#region IAnimalProvider members
public string Id{ get; set; }
#endregion
}
// somewhere in a console application
public static void Main(string[] args)
{
JoburgZoo zoo = new JoburgZoo();
zoo.Id = "Mammals";
**// edit: an instance of the provider will be created**
MonkeyProvider<JoburgZoo> mp = new MonkeyProvider<JoburgZoo>();
mp.CheckMonkeys(zoo); // where CheckMonkeys(JoburgZoo) is a method in the provider
}
現在,這裏是我的實際問題:
我必須暴露的內部屬性通過BaseProvider實現它的每個實例都可以訪問。這個屬性需要在任何給定的點返回「Id」的值,但我似乎無法通過反射來獲得值(我知道這是對此的解決方案)。
從我的各種徒勞的努力:
Type type = typeof(T); // this returns BaseProvider<MonkeyProvider<T>>
var generic = type.GetGenericTypeDefinition(); // brings back BaseProvider<T>
我不能創建T的新實例,它會清除當前分配給對象的所有值。我無法迭代屬性信息集合,因爲這隻會返回BaseProvider的屬性。
感謝您的任何幫助。 Eric
//編輯。 在上面的控制檯主代碼中添加了一個額外的呼叫。的MonkeyProvider<T>
模板JoburgZoo實例,所以在ProviderBase<T>
它看起來像什麼:
ProviderBase<MonkeyProvider<JoburgZoo>>
我想知道JoburgZoo的性質是什麼,從BaseProvider<T>
內,而不需要識別withing MonkeyProvider<T>
的對象。
希望這是有道理的。
你什麼時候創建您的供應商?可能更多的代碼將清除smokey雲? – TalentTuner 2010-12-09 09:06:58
JoburgZoo是一種提供者? – TalentTuner 2010-12-09 09:11:15