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

    [VB.NET]Creare classe dal nome a stringa!

    Salve a tutti, sono nuovo e parto con le domande
    Sapete come creare una classe partendo dal suo nome?
    Vi faccio un esempio per capire cosa intendo:
    Public Class MiaClasse
    End Class
    [...]
    Dim classe As Object = CreaClasse("MiaClasse")

    che dovrebbe corrispondere a Dim classe As Object = New MiaClasse()

    Altrove mi hanno consigliato di utilizzare Activator.CreateInstanceFrom,
    quindi ho creato un nuovo progetto per testare e ho scritto questo:
    Public Class ClasseX
    Public Sub New()
    MsgBox("Mi hai creato!")
    End Sub
    End Class
    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim myname As String = System.IO.Directory.GetCurrentDirectory() + "\WindowsApplication10.exe"
    Dim oh As System.Runtime.Remoting.ObjectHandle = _
    Activator.CreateInstanceFrom(myname, "ClasseX")
    End Sub
    'il nome dell'eseguibile è corretto, già controllato!
    End Class

    ma mi da errore:

    Impossibile caricare il tipo 'ClasseX' dall'assembly 'WindowsApplication10, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
    Potete aiutarmi? Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Forse il problema è qui:

    Dim oh As System.Runtime.Remoting.ObjectHandle = _
    Activator.CreateInstanceFrom(myname, "Nome completo namespace.nomeclasse")

    Quindi devi aggiungere anche il namespace dove si trova la classe.

    Io di solito la faccio leggermente diverso:

    codice:
    //Carico l'assembly corrente
    Assembly assMain = Assembly.GetExecutingAssembly();
    String nomeClasse = "nomeclasse con namespace";
    // Cerco nel main se esite questo tipo
    Type type = assMain.GetType(nomeClasse);// Ritorna null se non trova il tipo nell'assembly
    if (type != null)// Se esiste la classe nomeClasse nell'assembly assMain allora crea oggetto
     object classInstance = Activator.CreateInstance(type);
    I got the remedy

  3. #3
    Imports System.Reflection

    Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim assMain As Assembly = Assembly.GetExecutingAssembly()
    Dim nomeClasse As String = "Nam1.ClasseX"
    Dim type As Type = assMain.GetType(nomeClasse)
    Dim classInstance As Object = Activator.CreateInstance(type)
    End Sub
    End Class
    Namespace Nam1
    Public Class ClasseX
    Public Sub New()
    MsgBox("beh? perchè non funziono?")
    End Sub
    End Class
    End Namespace


    type è null!

  4. #4
    Ok ho risolto da solo con questo codice:
    codice:
            Dim assMain As Assembly = Assembly.GetExecutingAssembly()
            Dim types() As Type = assMain.GetTypes()
            Dim classInstance As Object
            For Each type As Type In types
                If type.Name = "ClasseX" Then
                    classInstance = Activator.CreateInstance(type)
                End If
            Next
    Funziona!
    Grazie se non mi avessi aiutato non ci sarei arrivato.

  5. #5
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Prego
    I got the remedy

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.