Newsgroup: it.comp.lang.visual-basic
Titolo: Classi, come e perche'

Ciao a tutti,
anche se il mittente e' per voi sconosciuto, sono sempre Rossignol, ho
soltanto cambiato nick.
Come da voi suggerito, sto studiando il 
vb.net
 con l'aiuto del libro di
Balena; purtroppo pero' le mie lacune in vb6 stanno pesando
sull'apprendimento di 
vb.net
 con un libro fatto per chi e' gia' ferrato in
vb6.
Passo alla domanda...
sto cercando di capire come funzionino le classi e, devo dire, non trovo
particolari difficolta'. Quello che non capisco e' quando si devono usare.
Mi spiego meglio...
ho visto che anche le strutture hanno la possibilita' di avere costruttori,
metodi ecc., perche' dovrei usare delle classi? Quello che mi manca,
soprattutto, e' un esempio di codice che mi faccia vedere perche' scegliere
proprio la strada delle classi.
Chi prova a farmi capire di piu'?
Ciao... Maurizio

 metodi ecc., perche' dovrei usare delle classi? 
Perchè le strutture sono Value Type, quindi è meglio che abbiano pochi 
membri, mentre le classi sono Reference Type.
Questa credo sia la motivazione principale.
Es.:
Structure Pippo
	Public x as int32
End Structure
Class Pluto
	Public x as int32
End Class
Dim a, b As New Pippo
Dim c, d As New Pluto
b.x = 5
a = b
a.x = 10
' b.x vale 5, a.x vale 10
d.x = 5
c = d
c.x = 10
' sia d.x che c.x valgono 10
Ciao

 particolari difficolta'. Quello che non capisco e' quando si devono usare.
Taglio
Spiegare meglio di Balena, per me, è difficile.
Propongo un esempio.
Ho necessità di ampliare le proprietà di un TextBox che utilizzerò in molti
proggetti,
quindi mi serve un componente standard.
Aggiungo, al proggetto, la seguente classe:
<inizio classe>
Public Class classTextBoxPersonalizzata
    Inherits System.Windows.Forms.TextBox
    Private p_SoloNumeri As Boolean
    'Proprietà booleana per vincolare la digitazione di soli numeri
    Public Property SoloNumeri() As Boolean
        Get
            Return p_SoloNumeri
        End Get
        Set(ByVal Value As Boolean)
            p_SoloNumeri = Value
        End Set
    End Property
    'Nel focus della casella il BakColor diventa Pink
    Private Sub classTextBoxPersonalizzata_GotFocus(ByVal sender As Object,
ByVal e As System.EventArgs) Handles MyBase.GotFocus
        Me.BackColor = Color.Pink
    End Sub
    'Lasciata la casella, il BackColor diventa bianco
    Private Sub classTextBoxPersonalizzata_LostFocus(ByVal sender As Object,
ByVal e As System.EventArgs) Handles MyBase.LostFocus
        Me.BackColor = Color.White
    End Sub
    'Evento KeyPress
    Private Sub classTextBoxPersonalizzata_KeyPress(ByVal sender As Object,
ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        'Se la proprietà SoloNumeri=True
        'verifico che il carattere digitato è un numero
        If SoloNumeri = True Then
            If Char.IsDigit(e.KeyChar) = False Then
                e.Handled = True
            End If
        End If
    End Sub
End Class
<fine classe>
- In una maschera aggiungere una TextBox, prelevata dalla Casella degli
strumenti.
- Modificare nel codice collassato l'istanza della variabile. Se la TextBox
aggiunta si chiama TextBox2:
<Modifiche codice collassato>
Friend WithEvents TextBox2 As classTextBoxPersonalizzata '
System.Windows.Forms.TextBox
Me.TextBox2 = New Prova4.classTextBoxPersonalizzata
<Fine modifiche codice collassato>
Avvia il proggetto e testa la TextBox.
Il precedente può diventare un Assembly.dll autonomo, ed essere esterno al
progetto.
Presumo, solo conoscendo la struttura delle classi, posso manipolare gli
oggetti.
Ave
giuseppeD

 Questa credo sia la motivazione principale.
Un'altra grossa differenza č che le strutture non godono di tutti quegli 
strumenti come l'implementazione di interfaccie o l'ereditarietą.
Ciao


come ti hanno fatto vedere
con il NET puoi espandere partendo da classi base ...
in VB6...più che altro era per pulizia....
c'è da dire che in vb6 le ho usate pochissimo....
in NET invece...ho cominciato ad usarle...adirittura nelle pagine asp
(aspx)....
che mi stia ricredendo sul net????!!!!!
Naaaaaaaaaaaaaaaaaaaaaaaa!
:-P
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
:-)

metodi ecc., perche' dovrei usare delle classi?
Tratto da MSDN:
"Struct Usage Guidelines
	It is recommended that you use a struct for types that meet any of
	the following criteria: 
	1 - Act like primitive types. 
	2 - Have an instance size under 16 bytes. 
	3 - Are immutable. 
	4 - Value semantics are desirable."
Ovvero, si consiglia di usare strutture se il tipo che devi
rappresentare è "leggero" e non ha molti membri, se non deve ereditare o
essere ereditato, e se viene usato come un tipo primitivo.
Se apri la documentazione dell'SDK e osservi il namespace System, vedrai
che i tipi primitivi come Boolean, Double etc. sono tutte strutture.
A questo punto bisogna parlare in termini di tipi per valore (value
type) e tipi per riferimento (reference type), per rappresentare i primi
si usano le strutture, le classi per i reference type.
Ciò che differenzia i due è l'uso che fanno della memoria. Non vorrei
"incartarmi" in discorsi complicati cmq, diciamo che:
- quando si effettua un assegnamento tra v.t. viene effettuata una copia
campo per campo,
- quando si effettua un assegnamento tra r.t. viene copiato solo un
indirizzo di memoria.
Di conseguenza se devi passare un v.t. come parametro ad una funzione
che richiede r.t., verrà eseguita un'operazione di boxing. Daltronde se
una funzione ritorna un v.t. ad una variabile dello stesso tipo, verrà
effettuata un copia campo per campo tra il valore della funzione e la
variabile di destinazione. In entrambi i casi si avrà un certo
sovraccarico. Questo significa che chi ha esigenze maniacali in termini
di performance potrebbe preferire sempre le classi, prestando attenzione
al fatto che si lavora con indirizzi di memoria e che a forza istanziare
classe magari interverrà il garbage collector.
Ciao!

On Tue, 23 Mar 2004 21:54:12 GMT, ErPotenza <no....@thank.you> wrote:
Se vuoi darci un'occhiata ...
http://msdn.microsoft.com/msdnmag/issues/1200/dotnet/toc.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchUseClassStruct.asp