Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    Definire un tipo di dato runtime

    Cerco di spiegarmi meglio...
    A parole non ci riesco... provo con il codice:
    codice:
    type oggetto = typeof(miaClasse);
    Con questa cosa qui se ho capito bene "oggetto" lo posso usare come se fosse di tipo "miaClasse"...

    Mettiamo caso ora che ho due classi "Class1" e "Class2" e che ha seconda dei casi il mio "oggetto" deve essere o "Class1" o "Class2".... purtoppo per come è strutturato il programma non posso fare un semplice
    codice:
    if(bla bla bla)
        type oggetto = typeof(Class1);
    else
        type oggetto = typeof(Class2);
    Ma devo mettere in una variabile il nome della classe e poi assegnare ad oggetto in runtime questo nome... come devo fare?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Prima di tutto il linguaggio nel titolo.. credo sia c#

    codice:
    type oggetto = typeof(miaClasse);
    in oggetto c'è il tipo di miaClasse quindi ad esempio: string, int, object e compagnia suonante

    tu secondo me vuoi una cosa del genere

    codice:
    if(typeof(miaClasse) == typeof(Class1))
    {
        //miaClasse è di tipo Class1 che ci devi fare??
    }
    else
    {
       //miaClasse è di tipo Class2 che ci devi fare??
    }

  3. #3
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da Stoicenko
    Prima di tutto il linguaggio nel titolo.. credo sia c#
    Si scusa... l'ho dimenticato... e dire che mentre scrivevo il titolo mi dicevo di metterlo... comunque... no non voglio quella cosa... ti scrivo il codice in JAVA che ho e che devo trasformare in c#....
    codice:
    ...
    private void open(String filename){
       String className = getClassName(filename); 
       Class clazz = Class.forName(classname) ; //Non capisco come trasformare questa riga   
       (Viewer) viewer = (Viewer)clazz.newInstance(); // e questa
       viewer.setFilename(filename);
       viewer.show();
    Class è una classe già definita in java... Viewer è una vista creata precedentemente...

    Ti scrivo anche l'implementazione di "getClassname(filename)" (che ho già fatto in c# e funziona pure, ma forse ti è più chiaro cosa deve fare il codice)
    codice:
    private string getClassname(string filename){
     //recupera l'estensione del file//
    Se l'estensione è .jpg 
        nomeClasse = "JPGViewer"
    Se l'estensione è .txt
        nomeClasse = "TXTViewer"
    dove JPGViewer e TXTViewer sono classi create in precedenza....

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    per istanziare classi e oggetti con il nome devi usare la reflection

    ti consiglio di guardare sull msdn che ci sono vari esempi su come utilizzarla

  5. #5
    Originariamente inviato da Stoicenko
    per istanziare classi e oggetti con il nome devi usare la reflection

    ti consiglio di guardare sull msdn che ci sono vari esempi su come utilizzarla
    perfetto.... ti ringrazio tantissimo, ora vedo quello che riesco a fare...

    PS.: Ops.. con il nick di mio fratello.. va boh non fa nulla...

  6. #6
    codice:
    object tuoOggetto = Activator.CreateInstance(Type.GetType("TuoNamespace.TuaClasse"));
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Originariamente inviato da MItaly
    codice:
    object tuoOggetto = Activator.CreateInstance(Type.GetType("TuoNamespace.TuaClasse"));
    Ah voglio provare pure così.... grazie... Però
    codice:
    Type classe2 = Type.GetType("Viewer.ImageView");
    Non funziona... Ho controllato e il namespace e la classe sono corretti... Pùò essere che il motivo è che la classe ImageView è una classe derivata?

  8. #8
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    ah... comunque è tutto pubblico... la cosa stra è che se metto typedef(Viewer.ImageView) funziona, ma non posso usare il typedef in questo caso...

  9. #9
    Sei sicuro di aver inserito il "percorso" completo (in termini di namespace) della classe?
    Amaro C++, il gusto pieno dell'undefined behavior.

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.