Maison >développement back-end >C++ >Puis-je passer un système System Instancié comme paramètre de type générique en C #?
Passez un système instancié.Type en tant que paramètre de type pour une classe générique
La question se concentre sur la faisabilité de la construction d'une classe générique avec une instance de type instanciée. Plus précisément, peut-on créer une instance de MyGenericClass & lt; myType & gt; Où MyType est déterminé dynamiquement?
L'approche directe résulte de l'erreur du compilateur "Le type ou l'espace de noms" myType "n'a pas pu être trouvé." Pour surmonter cette limitation, la réflexion offre une solution.
En utilisant la réflexion, on peut créer dynamiquement un type compatible avec le paramètre de type de la classe générique. Voici un exemple:
public class Generic<T> { public Generic() { Console.WriteLine("T={0}", typeof(T)); } } class Test { static void Main() { string typeName = "System.String"; Type typeArgument = Type.GetType(typeName); Type genericClass = typeof(Generic<>); // MakeGenericType is badly named Type constructedClass = genericClass.MakeGenericType(typeArgument); object created = Activator.CreateInstance(constructedClass); } }
Notez que bien que l'exemple utilise un paramètre de type unique, plusieurs paramètres sont pris en charge. Pour omettre un paramètre de type pour une classe générique avec plusieurs paramètres, incluez des virgules dans les espaces réservés, comme le montre l'exemple suivant:
Type genericClass = typeof(IReadOnlyDictionary<>, <>); Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!