2013-10-01 2 views
-3

Je suis en train de comprendre plus sur la classe Assemblée et de ses méthodes et il est un exemple de la manière suivante sur ce URL comme suit:GetType (« ClassName) .GetMethod (» NomMéthode ") renvoie une erreur

Cependant, la méthode : assem.GetType("Example").GetMethod("SampleMethod") génère une erreur d'exception et se plaint de ne pas avoir une référence d'objet

Semble la méthode avant que cette méthode renvoie la valeur null ainsi Toute idée

using System; 
using System.Reflection; 
using System.Security.Permissions; 

[assembly:AssemblyVersionAttribute("1.0.2000.0")] 

public class Example 
{ 
    private int factor; 
    public Example(int f) 
    { 
     factor = f; 
    } 

    public int SampleMethod(int x) 
    { 
     Console.WriteLine("\nExample.SampleMethod({0}) executes.", x); 
     return x * factor; 
    } 

    public static void Main() 
    { 
     Assembly assem = Assembly.GetExecutingAssembly(); 

     Console.WriteLine("Assembly Full Name:"); 
     Console.WriteLine(assem.FullName); 

     // The AssemblyName type can be used to parse the full name. 
     AssemblyName assemName = assem.GetName(); 
     Console.WriteLine("\nName: {0}", assemName.Name); 
     Console.WriteLine("Version: {0}.{1}", 
      assemName.Version.Major, assemName.Version.Minor); 

     Console.WriteLine("\nAssembly CodeBase:"); 
     Console.WriteLine(assem.CodeBase); 

     // Create an object from the assembly, passing in the correct number 
     // and type of arguments for the constructor. 
     Object o = assem.CreateInstance("Example", false, 
      BindingFlags.ExactBinding, 
      null, new Object[] { 2 }, null, null); 

     // Make a late-bound call to an instance method of the object.  
     MethodInfo m = assem.GetType("Example").GetMethod("SampleMethod"); 
     Object ret = m.Invoke(o, new Object[] { 42 }); 
     Console.WriteLine("SampleMethod returned {0}.", ret); 

     Console.WriteLine("\nAssembly entry point:"); 
     Console.WriteLine(assem.EntryPoint); 
    } 
} 

/* cet exemple de code produit similaire à..? les éléments suivants:

Assemblée Nom complet: source Version = 1.0.2000.0, Culture = neutral, PublicKeyToken = null

Nom: Source Version: 1.0

Assemblée CodeBase: file: // /C:/sdtree/AssemblyClass/cs/source.exe

Example.SampleMethod (42) est exécutée. SampleMethod retourné 84.

point d'entrée de l'Assemblée: Void principal() */

+3

je vais deviner 'GetType (..)' retourne null. S'il vous plaît travailler * * isoler le problème réel - si GetType ne retourne NULL, alors GetMethod est tout à fait étrangère. – user2246674

+1

Vous nous avez donné un programme * * ne travail ... Qu'en est-il un programme qui ne fonctionne pas * *? (Ce code fonctionne vraiment pour moi ... il est pas vraiment clair si vous utilisez ce code exact et avoir des problèmes, ou quoi ...) –

+0

je peux reproduire ce _if_ je mets ce code dans un espace de noms. Compte tenu de cela, -1 pour ne pas inclure le code réel. –

Répondre

0

Si vous jetez un oeil à la méthode Assembly.CreateInstance (vous trouverez la description here) vous pouvez voir que dans ce code:

Object o = assem.CreateInstance("Example", false, 
     BindingFlags.ExactBinding, 
     null, new Object[] { 2 }, null, null); 

Vous n'indiquez simplement aucune valeur à 'o'.

Puis, comme je l'ai dit, vous ne retournez pas par le:

assem.GetType("Example") 

ajouter l'espace de noms va vraiment résoudre le problème.

À l'avenir, essayez d'isoler le problème de trouver ce qui ne va pas. simlpy aide le débogage

Questions connexes