J'ai un besoin particulier que je n'arrive pas à comprendre. J'ai fait des recherches à ce sujet, mais je ne trouve pas de solution réalisable.Obtenir une liste de types génériques appliqués à n'importe quelle classe
j'ai une classe de base:
public abstract class BaseProvider<T> {}
cette classe à son tour est héritée par deux classes de fournisseur différents:
public sealed class MonkeyProvider<T>
: BaseProvider<MonkeyProvider<T>>
where T
: IAnimalProvider
Au sein de l'interface IAnimalProvider j'expose une seule propriété que toutes les mises en œuvre doivent dériver. Maintenant, MonkeyProvider et DonkeyProvider peut-être ou quelque chose des besoins similaires à savoir ce que la valeur attribuée à la propriété de l'instance racine est:
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
}
Maintenant, voici ma question réelle:
J'ai la nécessité d'exposer une propriété interne via BaseProvider auquel chaque instance qui l'implémente a accès. Cette propriété doit renvoyer la valeur de "Id" à un moment donné, mais je ne peux pas sembler pouvoir obtenir la valeur par réflexion (ce que je sais être la solution).
De mes divers efforts infructueux:
Type type = typeof(T); // this returns BaseProvider<MonkeyProvider<T>>
var generic = type.GetGenericTypeDefinition(); // brings back BaseProvider<T>
Je ne peux pas créer une nouvelle instance de T comme il efface toutes les valeurs actuellement affectées à l'objet. Je ne peux pas itérer la collection d'informations de propriété, car cela ne retournera que les propriétés de BaseProvider.
Merci pour toute aide à ce sujet. Eric
// Éditer. Ajout d'un appel supplémentaire dans le code principal de la console ci-dessus. l'instance de MonkeyProvider<T>
modèles JoburgZoo, donc en ProviderBase<T>
il ressemblera à quelque chose comme:
ProviderBase<MonkeyProvider<JoburgZoo>>
Je veux savoir ce que les propriétés de JoburgZoo est, à l'intérieur du BaseProvider<T>
sans qu'il soit nécessaire d'identifier l'objet withing MonkeyProvider<T>
.
Espérons que cela a du sens.
Quand allez-vous créer votre fournisseur? Peut-être plus de code va effacer les nuages smokey? – TalentTuner
JoburgZoo est un type de fournisseur? – TalentTuner