Virtual e override

di il
11 risposte

Virtual e override

Ciao,
Conosco la programmazione a oggetti per il C++ e passando al C# ho qualche perplessità sui metodi virtual/override. L' uso di override è come il virtual del C++ e cambia solo il nome o vi è altro da sapere? Il new su un metodo ha un qualche equivalente in C++?

11 Risposte

  • Re: Virtual e override

    Ciao Bruno81

    In C# la coppia Virtual/Override corrisponde alla coppia Virtual/Virtual del C++. Il vantaggio è che se fai un errore nel nome della funzione in C# ti viene segnalato errore se non esiste una funzione virtual con quel nome. Il 'new' per nascondere un metodo non ha equivalente in C++, o meglio lo fai senza scrivere niente, in C# è esplicito.
  • Re: Virtual e override

    E la coppia virtual/new ha qualche senso?
  • Re: Virtual e override

    Mi sembra un po strana ma comunque è corretta, non genera nessun errore o warning.
  • Re: Virtual e override

    Quindi è un po equivalente a scrivere virtual/override, visto che il metodo è virtuale nella classe base lo rimane anche in quella derivata. O funziona diversamente?
  • Re: Virtual e override

    No, non è equivalente a virtual/override. Se usi il new non viene richiamato il metodo della classe derivata.
  • Re: Virtual e override

    Veramente te lo dicevo perchè ho provato. Ho scritto queste classi
    
    class Animal
    {
       public virtual void Speak()
       {
          MessageBox.Show("Animal")
       }
    }
    
    class Cat
    {
       public new void Speak()
       {
          MessageBox.Show("Cat")
       }
    }
    
    poi ho istanziato la classe derivata
    
    Cat cat = new Cat()
    cat.Speak()
    
    e mi ha richiamato il secondo metodo.
  • Re: Virtual e override

    Veramente forse volevi fare:
    
    Animal animal = new Cat();
    animal.Speak();
    
  • Re: Virtual e override

    Opps.

    In effetti, col new non funziona come con l' override.
    Quindi virtual/new non ha molto senso.
  • Re: Virtual e override

    Bruno81 ha scritto:


    Quindi virtual/new non ha molto senso.
    Diaciamo che quando un metodo virtuale viene marcato con un 'new' smette di essere virtuale da li in giu. Poi che sia utile o meno è un altro discorso.
  • Re: Virtual e override

    Ancora una domanda e poi ti lascio in pace
    Invece la coppia abstract/virtual funziona come il virtual=0/virtual del C++ o nasconde qualche trucco?
  • Re: Virtual e override

    A parte il fatto che la coppia è abstract/override per il resto l' uso è come quello del C++.
    Unica cosa da sapere, se una classe contiene un metodo abstract pure la classe deve essere dichiarata abstract.
Devi accedere o registrarti per scrivere nel forum
11 risposte