Invocazione classi e metodi da stringa

di Anonimizzato30655 il
6 risposte
Buonasera a tutti, in C# avrei esigenza di chiamare una classe specificata dinamicamente da una stringa e poter successivamente accedere ai suoi metodi.
Ho provato ad usare il codice seguente, ma continua a generarmi eccezione di "object reference not set to an instance of an object" sull'ultima riga.

Type objectType  = Type.GetType("namespace.MyClass");
var myMethod = objectType.GetMethod("MyMethod");
var instantiatedObject = (Activator.CreateInstance(objectType));
myMethod.Invoke(null, null);
Grazie.

6 Risposte

  • Elixile ha scritto:


    in C# avrei esigenza di chiamare una classe specificata dinamicamente da una stringa e poter successivamente accedere ai suoi metodi.
    Stando al tuo codice, quello che stai cercando di fare tecnicamente è chiamare il metodo di un oggetto, o di una istanza.

    Elixile ha scritto:


    Ho provato ad usare il codice seguente, ma continua a generarmi eccezione di "object reference not set to an instance of an object" sull'ultima riga.
    Il primo parametro di richiede l'oggetto che possiede il metodo, mentre tu stai passando null.

    Vedi questo esempio per comprendere meglio.

    Ciao!
  • Anche passando come primo parametro l'oggetto ad Invoke:
    myMethod.Invoke(instantiatedObject , null);
    continua a darmi eccezione perché il GetMethod("MyMethod") non mi restituisce il metodo effettivamente esistente e non capisco perché.

    Grazie.
  • Elixile ha scritto:


    il GetMethod("MyMethod") non mi restituisce il metodo effettivamente esistente e non capisco perché.
    Come è stato dichiarato il metodo "MyMethod"?
  • La classe ed il metodo in questione sono:
    
    public class RevisionCounter
    {
        public int Value { get; set; }
    }
    
    public class Value
    {
        public string Local { get; set; }
        public string Text  { get; set; }
    }
    
    Mentre nel Main ho:
    
    var type = Type.GetType("Sensor.RevisionCounter"); //dove Sensor è il namespace
    var myMethod = type.GetMethod("Value");
    var initiatedObject = (Object)Activator.CreateInstance(type);
    myMethod.Invoke(initiatedObject, null);
    
  • Mi sembra che tu non abbia nessun metodo chiamato "Value" ,hai una proprietà chiamata Value ed una classe chiamata "Value"
  • Elixile ha scritto:


    La classe ed il metodo in questione sono [...]
    Value non è un metodo, ma una proprietà.
Devi accedere o registrarti per scrivere nel forum
6 risposte