Invocazione classi e metodi da stringa

di il
6 risposte

Invocazione classi e metodi da stringa

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

  • Re: Invocazione classi e metodi da stringa

    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!
  • Re: Invocazione classi e metodi da stringa

    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.
  • Re: Invocazione classi e metodi da stringa

    Elixile ha scritto:


    il GetMethod("MyMethod") non mi restituisce il metodo effettivamente esistente e non capisco perché.
    Come è stato dichiarato il metodo "MyMethod"?
  • Re: Invocazione classi e metodi da stringa

    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);
    
  • Re: Invocazione classi e metodi da stringa

    Mi sembra che tu non abbia nessun metodo chiamato "Value" ,hai una proprietà chiamata Value ed una classe chiamata "Value"
  • Re: Invocazione classi e metodi da stringa

    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