Vb.net message box

di il
6 risposte

Vb.net message box

Salve a tutti, ho questo codice:

dim x = new random
MessageBox.Show(x.next())
ho due domande da farvi:

a)perchè gli oggetti devo essere dichiarati per forza in modo dinamico(usando la new)? questo però non vale per gli integer,ad esempio, che sono anche loro oggetti, com'è questa cosa?

b)il metodo show accetta il testo da visualizzare come stringa, com'è che in quel caso io gli passo il valore di ritorno della next,che se non sbaglio è double, e lui lo accetta?

grazie mille a tutti per le risposte

6 Risposte

  • Re: Vb.net message box

    Ciao dna_programmer

    dna_programmer ha scritto:


    dim x = new random

    a)perchè gli oggetti devo essere dichiarati per forza in modo dinamico(usando la new)? questo però non vale per gli integer,ad esempio, che sono anche loro oggetti, com'è questa cosa?
    La scelta di allocare gli oggetti solo in modo dinamico è comune a diversi linguaggi, ad esempio oltre al C# e Vb mi vengono in mente Java e Objective-C, questa scelta semplifica molte cose. Per quanti riguarda gli interi alcuni linguaggi non li considerano oggetti (ad es. il C++) mentre in .NetFramework sono oggetti a tutti gli effetti e derivano dalla classe 'Object'. Niente ti vieta di scrivere:
    
    Dim n As Integer = New Integer
    
    oppure in C#
    
    int a = new int();
    
    Però per comodità dato che gli interi li usi come il prezzemolo (lo stesso vale per le stringhe) viene permessa anche la sintassi senza new.

    dna_programmer ha scritto:


    MessageBox.Show(x.next())

    b) il metodo show accetta il testo da visualizzare come stringa, com'è che in quel caso io gli passo il valore di ritorno della next,che se non sbaglio è double, e lui lo accetta?
    In .NetFramework tutti gli oggetti possono essere convertiti automaticamente in stringa. La classe Object possiede il metodo virtuale 'ToString()' e questo vale anche per gli integer e i double (che sono oggetti derivati da Object).
  • Re: Vb.net message box

    Ciao barba, quindi è solo una questione di sintassi offerta dall'IDE. Nel dettaglio qual'è la convenienza nell'allocare tutto dinamicamente, rispetto a usare lo stack( e quindi allocare in modo statico)?
  • Re: Vb.net message box

    Me ne vengono in mente un paio, il primo è che non devi avere la doppia sintassi, ad esempio in C++ usi in un caso il punto nell' altro la freccia.
    
    p.FaiQualcosa();
    g->FaiQualcosAltro();
    
    Il secondo riguarda il polimorfismo, dato che questo si basa sull' uso dei puntatori (abbiamo discusso di questo tempo addietro nell' area C++) avere tutti gli oggetti riferiti tramite puntatore rende il suo uso spontaneo ed evita trabocchetti.
  • Re: Vb.net message box

    Ok,quindi è solo una comodità. scusa ma ho altre due domande(ricominciamo xD):

    a) la classe Object li definisce i metodi che ha, oppure le classi che derivano da lei le definisce? cioè ad esempio il metodo ToString() nella classe Object ha un'implementazione oppure la classe random lo definisce?

    b)il metodo ToString hai detto che è virtuale, questo è sempre per il fatto dell'overriding per far collegare bene i metodi derivati? o per il fatto che è virtuale puro come in C++ che definisce una classe astratta?

    Grazie ancora per la disponibilità
  • Re: Vb.net message box

    Ciao dna_programmer,
    il metodo ToString() della classe object è implementato e restituisce il nome completo della classe, (quindi serve un po a poco), ragion per cui le classi derivate quasi sempre lo ridefiniscono.

    Ad esempio se definisci una classe MyClass in C# e non ridefinisci ToString(), il valore restituito è 'WindowsFormsCs.MyClass'

    In pratica ho già risposto anche al punto b), il metodo non è virtuale puro e per ridefinirlo devi scrivere 'override'
  • Re: Vb.net message box

    Aspetta , apro un topic a riguardo sul .Net cosi' approfondiamo di la
Devi accedere o registrarti per scrivere nel forum
6 risposte