Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C#] Reflection per invocare un metodo NON PUBBLICO

    Buonanotte (vista l'ora),

    Domanda da un milione di dollari. Io creo una classe stupidissima, del tipo:

    codice:
    public class SimpleObject
        {
    
            public void Execute()
            {
                Type myType = this.GetType();
                myType.InvokeMember("myMethod", BindingFlags.Default | BindingFlags.InvokeMethod, null,this, null);
    
            }
    
            private void myMethod()
            {
                Console.WriteLine("ciao");
            }
        }

    nei miei sogni piu fantasiosi, questa classe dovrebbe in maniera dinamica richiamare un PROPRIO metodo privato da un metodo pubblico, in maniera che dall'esterno questi metodi privati restino inaccessibili se non attraverso l'entrypoint pubblico

    Qualcuno ha idea se con la Reflection o qualche altra diavoleria c'è modo per fare ciò? Perchè ora come ora questo codice non funziona inquanto mi viene sollevata un MEthodNotFound (o qualcosa del genere) perchè non riesce a trovare i metodi privati, mentre switchando a public il metodo "myMethod" funziona tutto correttamente

    Non riesco a capire se in .net esista qualcosa che permetta di aggirare le barriere public/private dei metodi per poterli invocare... cavoli, scrivendo this.myMethod funziona tranquillamente, ma a me serve di richiamarlo dinamicamente sto metodo... :'(

    Grazie a tutti
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  2. #2
    Ok Ok mi rispondo da solo....

    se ho ben capito, via Reflection non è possibile accedere a membri privati. Però usando membri protetti si, quindi poi per invocare il metodo protetto basta:

    codice:
    myType.InvokeMember("myMethod", 
      BindingFlags.Istance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null,this, null);
    
    
    ...
    
    protected void myMethod(){}




    ps: non sono schizzofrenico che prima posto la domanda e subito dopo posto la risposta, è solo che dopo 2 ore circa di ricerche è finalmente trovato una righina piccola piccola di aspitalia che diceva che i membri privati non sono accessibili
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Guarda che normalmente in un metodo pubblico può benissimo essere chiamato un metodo privato, un bel


    codice:
    this.myPrivateMethod();

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Considerata l'attenzione riposta nell'ambito della sicurezza nel .NET Framework, sarei portato a pensare che impedire la chiamata di metodi privati sia del tutto normale.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Ciò non toglie che i metodi pubblici possono invocare metodi privati..

    Non ci sono limitazioni.. non vedo dove sia il problema..

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da Stoicenko
    Ciò non toglie che i metodi pubblici possono invocare metodi privati..
    Non ci sono limitazioni.. non vedo dove sia il problema..
    Se ti riferisci alla stessa classe, sì, ma presumo che l'autore parli di accedere da una classe ai metodi privati di un'altra classe, tramite Reflection.

    In questo caso, non lo invochi senz'altro direttamente, e penso che nemmeno la Reflection lo consenta.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Mi spiego,

    io ho una mia classe che fa una cosa del genere:

    codice:
    private string[] _methods={ "op1","op2","op3"};
    
    ....
    
    
    public void Execute() //entrypoint
    {
    
    ......
    
    Type myType=typeof(MyClass);
    
    myType.InvokeMember( _methods[i], .........);
    
    ....
    }
    
    //metodi da chiamare della classe
    private void op1(){}
    private void op2(){}
    private void op3(){}
    quindi speravo ci fosse un modo per richiamare quei metodi privati dalla stessa classe, ma non mi pare esista.. Cmq si risolve rendendo i metodici da private a protected


    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Mod posso chiedere a qualcuno se mi spiega lo scopo e il principale utilizzo della reflection?

  9. #9
    Originariamente inviato da Max Mercury
    Mod posso chiedere a qualcuno se mi spiega lo scopo e il principale utilizzo della reflection?

    http://www.codeguru.com/csharp/cshar...cle.php/c4257/

    e mi pare che una introduzione ci sia anche qui su html.it nella sezione asp.net
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da Max Mercury
    Mod posso chiedere a qualcuno se mi spiega lo scopo e il principale utilizzo della reflection?
    Ovvio che sì, ma dovresti aprire una discussione per porre la tua domanda, come sempre.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.