Shared function

mercoledì 28 marzo 2007 - 23.50

Chryses Profilo | Newbie

Ciao, spero sia il posto giusto....

Premesso che sono un novizio, ho un problema/dubbio.

Ho creato un progetto

Public Class Form1
...
end class

ho quindi creato la parte grafica, per ora solo un bottone ed una webbrowser.

Alla fine ho creato il codice che mi serve, oviamente semplice, saltellando di funzione in funzione.

Ora però mi accorgo che non è il massimo avere tutto mischiato, ho quindi aggiunto una classe.

Public Class Funzioni
...
end class

Ecco ora viene il difficile.

Ho letteralmente spostato all'interno della classe una funzione, e l'ho impostata come shared, con relativo return del dato finale

Shared Function pincopallino(ByVal username As String, ByVal password As String) As String
...
end function

il problema è che poi nel codice del form principale non so come richimarla, ho provato, nel codice di click di un bottone

Dim url As String = pincopallino(username, password)

ma mi sottolinea pincopallino e mi informa che non è stato dichiarato...

Ma non è una funzione pubblica?

Chi mi sa illuminare?

Grazie in anticipo

Cry

alx_81 Profilo | Guru

>Ciao, spero sia il posto giusto....
Ciao! Speriamo di sì
>
>Premesso che sono un novizio, ho un problema/dubbio.
>Ho creato un progetto
>
>Public Class Form1
>...
>end class
>
>ho quindi creato la parte grafica, per ora solo un bottone ed
>una webbrowser.
Quindi hai, nel tuo progetto, una Form che gestisce un bottone ed un web browser
>
>Alla fine ho creato il codice che mi serve, oviamente semplice,
>saltellando di funzione in funzione.
>
>Ora però mi accorgo che non è il massimo avere tutto mischiato,
>ho quindi aggiunto una classe.
>
>Public Class Funzioni
>...
>end class
>
>Ecco ora viene il difficile.
>
>Ho letteralmente spostato all'interno della classe una funzione,
>e l'ho impostata come shared, con relativo return del dato finale
>
>Shared Function pincopallino(ByVal username As String, ByVal
>password As String) As String
>...
>end function
>
>il problema è che poi nel codice del form principale non so come
>richimarla, ho provato, nel codice di click di un bottone
>
>Dim url As String = pincopallino(username, password)
>
>ma mi sottolinea pincopallino e mi informa che non è stato dichiarato...
>
>Ma non è una funzione pubblica?
sì, è pubblica.. ma il problema è che non definisci che classe espone quel metodo..
>
>Chi mi sa illuminare?
Facciamo un attimo il punto della situazione.. Tu parti dalla tua form e vuoi avere un repository centralizzato per alcune utili funzioni che probabilmente riutilizzerai all'interno del codice che andrai a scrivere.
L'idea di scegliere una funzione shared (satic in sintassi c#) è buona, visto che mi sembra di capire che a te serva avere un valore restituito da quella funzione, senza istanziare per forza l'oggetto che contiene il metodo (la tua funzione in filosofia a oggetti è un metodo, e ancora più in generale, un membro della classe). Quindi preso per buono che la scelta di fare un metodo statico sia valida, puoi semplicemente accedere alla funzione utilizzando la sintassi NomeClasse.NomeFunzione(parametri).. E' statico proprio perchè non serve l'istanza della classe.. fa solo qualcosa, senza essere dinamico in base ai valori assunti dall'oggetto..
Esempio:

File FormProva.vb

Publc Class FormProva ' metodo che richiama la funzione shared Public Sub BtnVisualizza_Click(ByVal Messaggio as String) Handles BtnVisualizza.Click MsgBox(Funzioni.MessaggioMaiuscolo(Messaggio)) End Sub End Class

File Funzioni.vb
Public Class Funzioni ' metodo shared Public Function MessaggioMaiuscolo(ByVal Messaggio as String) return Messaggio.ToUpper() End Sub End Class

Fai attenzione ai namespace.. perchè se la funzione si trova in un altro progetto, essa è accessibile passando solo prima tramite il nome del progetto. Ad ogni modo devi controllare che la tua classe Funzioni non sia sotto namespace particolari, come ad esempio:

File Funzioni.vb
Namespace Utili Public Class Funzioni ' metodo shared Public Function MessaggioMaiuscolo(ByVal Messaggio as String) return Messaggio.ToUpper() End Sub End Class End Namespace

in questo caso la funzione è accessibile con il percorso Utili.Funzioni.MessaggioMaiuscolo(Messaggio)..
Probabilmente nel tuo caso è sufficiente indicare il percorso semplice, Funzioni.TuaFunzione(parametri)..

>
>Grazie in anticipo
Di nulla!
>
>Cry
>

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Chryses Profilo | Newbie

Ciao, grazie per la risposta, era così semplice, anche se non so come mai, essendo pubblica non si possa richiamare semplicemente con il nome della funzione e gli argomenti da passare.

Esatto io in sostanza sto cercando di "decentrare" le varie funzioni, in sostanza avrò 3-4 costanti che una volta calcolate, per tutta la durata del programma saranno sempre e solo quelle e quindi non devono variare ed in base a questo ti chiedo:

Sperando di ricordare bene, mi sembra che una classe o funzione se pubblica può modificare il valore della costante al suo interno al variare del codice, o meglio, la costante dichiarata in partenza può poi nel corso della funzione stessa cambiare di valore.

Meglio una funzione pubblica, privata, shared o addirittura in readonly?

Già mi sconvolge il fatto di poter passare il parametro pippo alla funzione dove magari il parametro nella funzione prende il nome di pluto e alla fine si può restituire minni.........

Leggendo il codice di esempio che hai postato noto che tu restituisci un testo formattato, nel mio caso invece dovrò restituire 3-4 stringhe di testo.

Se io alla fine della mia funzione shared piazzo un bel

return username (ovviamente lo devo dichiarare all'inizio come stringa giusto?)

poi nel documento principale, quello per intenderci che ha un bottone ed una webbrowser, come utilizzo tale return?

Non vorrei che lo calcolasse ogni volta che ci faccio riferimento, o meglio il funzionamento sarebbe questo:

Click sul bottone -> recupera i valori costanti per questa sessione di programma -> li utilizzo per fare altro senza doverli ogni volta ricalcolare.

Grazie

Cry
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5