Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    [VB.NET] Ereditarietà e casting

    Scusatemi ma peché questa operazione non è consentita?

    codice:
    class A
    ...
    end Class
    
    class B
      inherits A
    ...
    end class

    poi in un sub faccio

    codice:
    dim obj_a as new A
    dib obj_b as new B
    
    obj_b = obj_a
    se B contiene ed espande A, perché questo casting nn è valido? Io sapevo (xo fino ad ora nn avevo provato) ke tale operazione è consentita...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Nel paradigma della programmazione ad oggetti, qualora un campo, una variabile o parametro faccia riferimento ad una classe, è possibile accettare riferimenti a qualsiasi istanza di tale classe o una delle sue discendenti in quanto è garantito dallo stesso paradigma che le classi discendenti, ereditando tutto ciò che è presente nella classe base, non saranno private di nulla che si trova in quest'ultima.

    Ovviamente, riflettendo questo principio, non può essere vero il contrario; per questo motivo l'operazione che tenti di eseguire segnala un errore, a meno che tu non esegua un "cast" esplicitando così le tue intenzioni; a runtime, se non è possibile eseguire il cast indicato, verrà generata opportunamente un'eccezione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    cioè, fammi capire

    obj_a = obj_b 'si
    obj_b = obj_a 'no

    ???
    è perché? B contiene A e non il contrario...
    ho provato a fare
    obj_b = CType(obj_a,A)

    ma nn va

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da FinalFantasy
    cioè, fammi capire
    obj_a = obj_b 'si
    obj_b = obj_a 'no
    ???
    è perché? B contiene A e non il contrario...
    B contiene A, quindi A è un sottoinsieme di B, quindi tutto ciò che c'è in A è contenuto anche in B, pertanto A è il minimo comune denominatore e quindi può essere assegnata ad istanze di A e di tutti i discendenti come B.

    B però potenzialmente introduce differenze ed elementi che non esistono in A, quindi non è possibile fare l'inverso.

    Originariamente inviato da FinalFantasy
    ho provato a fare
    obj_b = CType(obj_a,A)

    ma nn va
    "Non va" è una frase bruttissima da usare...occorre sempre indicare l'errore; comunque, tu stai castando ad "A" un'istanza di "A"...invece, devi castare a "B" quell'istanza, quindi
    codice:
    obj_b = CType(obj_a,B)
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.