Comment obtenir une instance d'une classe donnée le nom de la classe?
J'ai vu ce Sujet : La création d'une instance à partir d'un nom de classe
et écrit ce code:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object obj = Activator.CreateInstance(null, "MyClass");
MyClass t = (MyClass)obj;
t.My1 = 100;
MessageBox.Show(t.My1.ToString());
}
}
public class MyClass
{
public int My1 { get; set; }
public int My2 { get; set; }
}
Cependant, quand sa fonctionne il y a une exception:
Could not load type 'MyClass' from assembly 'Test_Reflection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
J'ai une autre question. J'ai une classe dans une assemblée qui a une certaine propriété. Dans une autre assemblée, je veux créer une instance, et d'accéder à ses propriétés, en tapant l'un d'entre eux vient à l'aide de chaînes de caractères Nom de la Classe. Comment puis-je le faire?
Êtes-vous sûr de lire la réponse que vous le lien?
Essayez de spécifier l'espace de noms.
Oui.Je passe null, car Maclasse est de le localiser dans l'Actuelle Assemblée
Pourquoi null provoquent une exception?
Le montage != Espace de noms.
Essayez de spécifier l'espace de noms.
Oui.Je passe null, car Maclasse est de le localiser dans l'Actuelle Assemblée
Pourquoi null provoquent une exception?
Le montage != Espace de noms.
OriginalL'auteur Arian | 2011-03-12
Vous devez vous connecter pour publier un commentaire.
Selon MSDN
null
en fait ne veut pas dire actuel de l'assemblée. Cela signifie que l'assemblée sera recherché (sa importe si votre classe est situé dans une autre assemblée). Aussi, vous devez spécifier non seulement le nom de la classe. Ainsi, pour éviter de rechercher et d'obtenir de type correctement, vous devez écrire plein assemblée nom qualifié:Assemblée nom qualifié que vous pouvez récupérer par exemple avec le code suivant (pour vérifier que vous n'êtes pas confondre):
Les deux premières phrases ne font pas de sens pour moi. Pouvez-vous préciser? Si ce n'est pas assemblée en cours, ça veut dire quoi?
Melton, quand MyClass situé dans l'actuelle assemblée - peu importe comment écrire. Mais quand vous avez besoin d'utiliser la classe à partir d'une autre assemblée -
null
sera la cause de la recherche de cette assemblée. Beaucoup mieux à le spécifier explicitement.Heu ok.
Merci beaucoup.merci de me guider pour la deuxième question.
OriginalL'auteur Kyrylo M
Vous avez juste besoin d'ajouter de l'espace de noms pour le nom de la classe. Dans une console projet exe, cela fonctionne pour moi. Vous avez eu un problème avec la façon dont vous étiez à l'aide de l'objet retourné poignée. Ce n'est pas une
Object
, mais unObjectHandle
et vous avez besoin d'appelerUnwrap()
atteindre le type de l'instance.OriginalL'auteur Ritch Melton