Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Creare una classe
venerdì 29 ottobre 2004 - 20.50
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
forno
Profilo
| Junior Member
71
messaggi | Data Invio:
ven 29 ott 2004 - 20:50
Ciao a tutti, ho problemi nella creazione di una mia classe personalizzata. Ovvero, come devo fare per ottenere delle funzioni da inserire dopo la classe? Tipo: MaiClasse.MiaFunzione(Value, Value)??
GvnnRules
Profilo
| Senior Member
436
messaggi | Data Invio:
sab 30 ott 2004 - 12:40
Prima crei la tua classe MaiClasse.vb
Public class MaiClasse
Public Sub New()
End Sub
Public Function MiaFunzione(ByVal Value1 As String, ByVal Value2 As String) As String
Return Value1 & "-" & Value2
End Function
End Class
e poi richiami la funzione dalla tua form
Dim myObj As New MaiClasse()
Console.WriteLine(myObj.MiaFunzione("Pippo","Pluto"))
ciaoz
Gvnn
forno
Profilo
| Junior Member
71
messaggi | Data Invio:
sab 30 ott 2004 - 12:55
Grazie
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
lun 1 nov 2004 - 09:52
Se la tua classe serve da libreria di funzioni, puoi valutare la possibilità di dichiarare tali funzioni 'shared', il che ti eviterà l'incombenza di dover instanziare la classe per utilizzarle. Un esempio sono i metodi del namespace 'math': math.round......
Se nn erro, se la tua sub new dovesse essere vuota, potresti anche ometterla in quanto verrebbe utilizzato un costruttore di default, ma sto andando a memoria e potrei sbagliarmi....provare x verificare!:-)
forno
Profilo
| Junior Member
71
messaggi | Data Invio:
lun 1 nov 2004 - 11:40
Sinceramente: non ho capito! A me serve una libreria comune per diverse applicazioni!
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
lun 1 nov 2004 - 14:59
Anch'io uso qualcosa di simile. Quello che ti stavo dicendo, nn differisce motlo da queanto già detto prima, nello stesso thread. Volevo evitarti quello che accadde a me, cioè che pur potendo evitare la istanziazione della classe, per ignoranza, mi misi a creare oggetti ovunque avessi necessità di un metodo esposto dalla classe. In casi come il mio e forse come il tuo, basta dichiarare le funzioni come 'shared' e nn dovrai creare l'istanza della classe, cioè nn dovrai chiamare il metodo costruttore (New). Se comunque tu avessi bisogno di creare un'istanza, ma nn hai niente di particolare da scrivere nel metodo new, mi sembra di ricordare che tu possa ometterlo nella tua classe. I miei, in pratica, erano solo suggerimenti di 'ottimizzazioni', ma se ti creano confusione, forse è meglio che tu nn ti ci perda. Ricordati, comunque, che se istanzi la classe e quindi crei un oggetto, hai anche la rottura di scatole di ricordarti di distruggerlo. Ciao e buon lavoro :-)
schifidus
Profilo
| Junior Member
92
messaggi | Data Invio:
lun 1 nov 2004 - 20:10
Mi sembra che stiate facendo un pò di confusione...
Allora per non dover istanziare una classe o un metodo lo devi dichiarare static...
Statico stà appunto ad indicare che tale oggetto non necessita di essere istanziato (attraverso la keyword new) e quindi è disponibile a priori.
Un metodo statico può quindi essere considerato una sorta di "costante".
Il problema che mi sembra tu voglia evidenziare è quello dell'incapsulamento.
Cioè il fatto che un metodo sia o meno visibile al'esterno della classe.
Per renderlo visibile lo devi dichiarare public altrimenti se vuoi che tale metodo o proprietà siano visibili e di conseguenza utilizzabili solo da oggetti interni alla classe lo devi dichiarare private.
Ciao Marco
ares99
Profilo
| Newbie
7
messaggi | Data Invio:
mar 2 nov 2004 - 12:30
Bimbi..
... Mi sa che DOVETE DIMENTICARE VB6 e dovete leggervi un po di documentazione
sulla programmazione ad OGGETTI
questa mia non vuole essere una critica .. assolutamente..ma un consiglio
NON ANDATE A TENTONI..
un po di pazienza e si fa tutto
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 3 nov 2004 - 09:37
Static???
Sicuro della sintassi?
A parte la parola chiave, che mi sembra assomigli a qualcosa tipo 'C', probabilmente nn mi sono espresso bene, ma condivido tutto il resto. In effetti anch'io fui portato alla creazione di classi proprio per una questione di incapsulamento. Siccome, nonostante l'opinione di Ares, nn vengo da VB6, ma dall'assembly, ero assolutamente digiuno delle possibilità offerte dalle classi e dato che stavo al momento leggendo il capitolo sulla creazione delle stesse, fui illuminato dall'argomento e capii che avrebbe contribuito nn poco a mettere ordine in un modulo zeppo di procedure. Poi riflettendo a posteriori, mi resi conto che una buona parte delle classi create, era in effetti poco più che una raccolta di procedure che avrei potuto tranquillamente utilizzare senza dover instanziare la classe stessa e, salvo errori, per ottenere tale risultato, la funzione deve essere dichiarata 'shared' . Questo era il concetto primario che volevo passare. Probabilmente nn sono riuscito a farmi capire e me ne scuso. Comunque, se la mia osservazione può essere utile e 'finalmente' comprensibile, me ne compiaccio, altrimenti presumo che la cosa migliore sia ignorarla, dato che sopravviverete tutti anche instanziando inutilmente una classe! :-)
Integro comunque con un estratto del primo risultato che mi dà la ricerca della parola 'shared' utilizzando l'help in linea:
È possibile utilizzare la parola chiave Shared per indicare che uno o più elementi di programmazione dichiarati sono condivisi. Gli elementi condivisi non sono associati a un'istanza specifica di una classe o di una struttura. È possibile accedere a tali elementi qualificandoli con il nome di classe o di struttura oppure con il nome di variabile di un'istanza specifica della classe o struttura.
La parola chiave Shared viene utilizzata nei seguenti contesti:
Istruzione Dim
Istruzione Event
Istruzione Function
Istruzione Property
Istruzione Sub
.....se poi Ares vuole contribuire ad illuminarci e a rischiarare la notte che ci avvolge con ulteriori contributi, ben venga. Nel frattempo, come d'uso, la sua opinione è comunque stata registrata sul giornale di bordo ! ;-))
ares99
Profilo
| Newbie
7
messaggi | Data Invio:
mer 3 nov 2004 - 10:14
Non pensavo di alzare un polverone..!!
Il paradigma di programmazione ad oggetti si basa su concetti fondamentali, che erano teorici , ma che col passar del tempo sono divenuti PRATICI, ( intendo che i linguaggi si sono plasmati con la teoria ) vedi per esempio JAVA o .NET ( VB.NET C#) che SONO FORTEMENTE TIPIZZATI
nel caso Specifico:
Il problema proposto da forno .. è stato risolto da Gynn.. ( infatti se lo esegui funziona )
ma concettualmente è giusto??
1) devo considerare che in OOP non esistono funzioni ( anche se le chiamiamo cosi ) ma esistono metodi che espongono gli oggetti!
tanto per farvi un esempio ( CONCETTUALMENTE ) che senso ha una classe che chiamo Messaggio che
abbia al suo interno una funzione SHARED ( STATICA ) ossia che VIENE CONDIVISA DA TUTTI GLI OGGETTI DI QUELLA CLASSE ..! che mi faccia la Somma di Interi?? !!
Mi dispiace di essere stato frainteso.. se qualcuno si è offeso voglia accettare le mie scuse!
Volevo solo sottolineare la potenzialità della programmazione ad oggetti.. che non era stata sfruttata.. :)
come avere una Ferrari e andare ad 80 km/h
un SALUTO SINCERO A TUTTI!
alextyx
Profilo
| Expert
668
messaggi | Data Invio:
mer 3 nov 2004 - 12:12
Caro Ares, l'esempio che ho portato, infatti, era proprio quello delle varie 'math.', che praticamente sono tutti metodi condivisi.
Non mettere in imbarazzo i programmatori della Microsoft. Magari se le hanno fatte erano convinti, pur sbagliando, ma in perfetta buona fede, che servissero pure a qualcosa! :-)
Sono d'accordo che la classe espone un'interfaccia di proprietà, metodi ed eventi. Tali metodi vengono dichiarati con parole chiave differenti a seconda che restituiscano un risultato (Function) oppure no (Sub). Ho continuato ad adottare la terminologia con cui è stato aperto il thread e che parlava di inserire delle 'funzioni', cioè quei metodi che restituiscono un valore.
Comunque, per riferirmi alla tua precisazione, forse abbiamo esperienze diverse, perchè tu scrivi:
tanto per farvi un esempio ( CONCETTUALMENTE ) che senso ha una classe che chiamo Messaggio che
abbia al suo interno una funzione SHARED ( STATICA ) ossia che VIENE CONDIVISA DA TUTTI GLI OGGETTI DI QUELLA CLASSE ..! che mi faccia la Somma di Interi?? !!
Io direi che un metodo 'shared' è disponibile anche senza creare un'istanza della classe e può essere utilizzato, anche da altre istanze di altre classi e nn solo da quelle della stessa classe, vincolo imposto, salvo sviste, dalla parola chiave 'Protected'.
Sono d'accordo con te sul fatto che una variabile dichiarata 'shared', è in effetti 'trasversale', nel senso che ha lo stesso valore in qualunque istanza della sua classe.
Una 'static', invece, che può essere dichiarata a livello di procedura, mantiene il valore tra successive chiamate della procedura (qui forse ci sono delle trappole, perchè credo che in altri linguaggi i termini abbiano significati ben diversi) e addirittura le due parole chiave Static e Shared, se ben ricordo, sono incompatibili tra loro.
Ma forse è solo un ingarbugliamento di termini che ci sta fuorviando!?
Torna su
Stanze Forum
Elenco Threads
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 !