Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Over-ride con tipi differenti.

    Salve,
    sto avendo problemi durante il lavoro su un progetto già fatto che devo "personalizzare" aggiungendo determinate funzionalità.


    Mi vengono fornite due classi, "VM" e "Host", e ognuna ha determinati metodi.

    Uno dei metodi della classe "Host" è questo:

    public void pippo (VM vm)
    {...}

    Io ho esteso singolarmente le due classi, ottenendo queste altre due classi: "VMClass" e "HostClass".



    All'interno della classe "HostClass" devo fare override del metodo pippo aggiungendo mie funzioni, ma anzichè passargli un oggetto della classe VM, devo passargli un oggetto della mia nuova classe "VMClass".


    Se provassi a scrivere:

    public void pippo (VMClass vm)
    {...
    metodi aggiuntivi...}

    non sarebbe più override perché io sto cambiando il tipo del parametro che gli passo.

    Per ovviare a questo problema, ho fatto override lasciando la stessa firma del metodo e poi all'interno del metodo ho fatto un casting, praticamente così:

    public void pippo (Vm vm)
    {
    VMClass vm1 = (VMClass) vm;
    ....
    }

    In questo modo anche i vecchi esercizi continuano a funzionare e ho potuto aggiungere determinate funzionalità.

    C'è un metodo più elegante per risolvere questo problema?
    Non lo so, una sorta di dichiarazione parametrica del tipo di parametro che passo alla mia funzione, facendogli capire che posso passargli non solo oggetti della classe VM ma anche oggetti di classi che estendono VM.

    Grazie a tutti per la disponibilità

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    VM è il metodo corretto per esprime VM e discendenti.

    Nella tua implementazione qualsiasi oggetto che non sia VMClass o discendente lancerà un eccezione a runtime, dovresti quantomeno documentarlo, oppure fare un controllo su cosa ti viene passato e agire di conseguenza.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.