martedì 2 settembre 2014

Metodi virtuali in C#

Per le funzioni virtuali in C# non sono necessari i puntatori.
A parte questo, non basta dichiarare virtual un metodo nella classe base, ma si deve trovare anche una corrispondenza del metodo con lo stesso nome nella classe derivata dichiarandolo override, altrimenti l'istanza della classe derivata attribuita a una variabile di tipo classe base esegue il metodo della classe base.
Adesso dichiaro virtual un metodo della classe base, dichiarando override il metodo con lo stesso nome nella classe derivata, quindi tolgo l'override e verifico:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Base
    {
        public virtual void metodo()
        {
            Console.WriteLine("Io sono il metodo della classe Base");
            Console.ReadLine();
        }
    }

    class Derivata:Base{

        public override void metodo()
        {
            Console.WriteLine("Io ridefinisco il metodo della classe Base");
            Console.ReadLine();

        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Base miaBase=new Base();
            Derivata miaDerivata=new Derivata();
            Base x;
            x = miaDerivata;

            miaBase.metodo();
            miaDerivata.metodo();
            x.metodo();
        }
    }
}
Io sono il metodo della classe Base

Io ridefinisco il metodo della classe Base

Io ridefinisco il metodo della classe Base




Ora tolgo override:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Base
    {
        public virtual void metodo()
        {
            Console.WriteLine("Io sono il metodo della classe Base");
            Console.ReadLine();
        }
    }

    class Derivata:Base{

        public void metodo()
        {
            Console.WriteLine("Io ridefinisco il metodo della classe Base");
            Console.ReadLine();

        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Base miaBase=new Base();
            Derivata miaDerivata=new Derivata();
            Base x;
            x = miaDerivata;

            miaBase.metodo();
            miaDerivata.metodo();
            x.metodo();
        }
    }
}
Io sono il metodo della classe Base

Io ridefinisco il metodo della classe Base

Io sono il metodo della classe Base


Ecco: perfettamente dimostrato!

Nessun commento:

Posta un commento