Chiarimento tipi di dato

di il
5 risposte

Chiarimento tipi di dato

Salve a tutti, usando vb.net ma anche altri linguaggi come il c++ mi è sorto un dubbio,
quando si dichiara una variabile, esempio: x as integer , integer cosa sarebbe un oggetto? Inoltre cosa cambia tra:

dim x as new integer

e

dim x as integer

Ecco ho un pò di confusione su questa cosa

5 Risposte

  • Re: Chiarimento tipi di dato

    Ciao dna_programmer,
    In un linguaggio ad oggetti ideale tutto è un oggetto, poi in mumerosi linguaggi di programmazione si è scesi a compromessi (per motivi di performance) ed alcune cose non sono oggetti, ad esempio gli interi in C++ e in Java non sono oggetti.

    In NetFramework invece non ci sono compromessi in quanto tutto è un oggetto, più semplice di così!

    La scritta Integer è una scorciatoia per Int32 che è una struct (la quale a sua volta è un oggetto), ed essendo una struct viene passato per valore e può essere inizializzato con l' operatore new.

    Tra l' altro un integer (essendo una struct, la quale è un Object) ha pure dei metodi (che eredita dalla classe Object), ad esempio il metodo ToString:
    
    Dim i as Integer
    Dim s as string = i.ToString()
    
    In NetFramework tutto è un oggetto e poichè la classe Object ha il metodo ToString, allora tutto ha il metodo ToString (provare per credere)

    Come abbiamo detto un Integer deriva dalla classe Object, e infatti puoi fare:
    
    Dim i as Integer
    Dim o as Object
    o = i  ' questa cosa si chiama boxing
    
    La stessa cosa la puoi fare con qualsiasi struct (ovvero puoi assegnare una Struct a un Object)

    Gli Integer come le struct (gli Integer sono Struct) se li crei col new vengono inizializzati, altrimenti no:
    
    Dim x as Integer        ' dichiara un tipo int e NON lo inizializza.
    Dim x as new Integer    ' dichiara un tipo int e lo inizializza
    
    Tutto questo discorso è relativo al NetFramework quindi vale sia per Il Visual Basic che per il C#
    Spero di esserti stato utile
  • Re: Chiarimento tipi di dato

    Ciao, spiegazione chiarissima, solo una cosa, quindi in pratica la differenza tra struct e classe quasi non esiste perché tutti e due hanno dati e metodi e anche l'ereditarietà, o sto sbagliando?
  • Re: Chiarimento tipi di dato

    Ciao dna_programmer,
    Classi e struct hanno in comune il fatto di essere oggetti, derivano dal tipo Object, hanno entrambe dati e metoti.

    Differiscono perche:
    - Le struct sono usate per valore (vengono copiate quando le assegni), le classi sono usate per riferimento
    - Le struct non supportano l' ereditartietà (non puoi derivare da una struct).

    Il problema principale con le struct è appunto il passaggio per valore, spesso si incorre nell' errore di modificare una copia di una struct invece dell' originale. Ad esempio se una classe contiene una struct e un metodo la restituisce, ne restituisce una copia.

    (prova a controllare se nel problema dei file che hai postato succede qualcosa del genere, altrimenti scrivi tutto il codice perchè così non saprei cosa dirti).
  • Re: Chiarimento tipi di dato

    Ciao,scusami se non ti ho risposto ma in questo periodo ho avuto problemi con internet. Comunque interessante questa cosa degli integer, però a questo punto mi sorgono due domande:

    1) Il fatto degli integer, vale anche per gli altri tipi di dato in vb.net(char,double ecc) ?

    2) Se gli struct alla fine sono oggetti, perché il C ha gli struct non essendo un linguaggio a oggetti?

    Grazie mille ancora e scusa per le mille domande
  • Re: Chiarimento tipi di dato

    dna_programmer ha scritto:


    Grazie mille ancora e scusa per le mille domande
    Figurati è un piacere e poi ogni volta imparo qualcosa pure io.

    dna_programmer ha scritto:


    1) Il fatto degli integer, vale anche per gli altri tipi di dato in vb.net(char,double ecc) ?
    Si, esatto vale per tutti i tipi.

    dna_programmer ha scritto:


    Se gli struct alla fine sono oggetti, perché il C ha gli struct non essendo un linguaggio a oggetti?
    Le struct del C sono solo un contenitore di dati, un oggetto invece racchiude dati ed azioni. Un gatto è un gatto non solo perche ha la coda e le orecchie ma anche perchè miagola e fa le fusa. Per caratterizzare un oggetto devi indicare come è fatto e come si comporta, ad esempio in un videogioco se crei una classe 'Soldato' al suo interno devi scrivere tutte le funzioni che descrivono il suo comportamento.

    Il C++ è diventato ad oggetti estendendo le Struct del C ed aggiungendo la possibilità di specificare funzioni al loro interno, poi un linguaggio ad oggetti ha altre caratteristiche ma questo è il primo passo.
Devi accedere o registrarti per scrivere nel forum
5 risposte