114 votes

Surcharge et surcharge

Quelle est la différence entre surcharge et surcharge.

242voto

cgreeno Points 17379

Surcharge de travail

On parle de surcharge lorsque vous avez plusieurs méthodes dans la même portée, avec le même nom mais des signatures différentes.

//Overloading
public class test
{
    public void getStuff(int id)
    {}
    public void getStuff(string name)
    {}
}

Remplacement de

La surcharge est un principe qui vous permet de modifier la fonctionnalité d'une méthode dans une classe enfant.

//Overriding
public class test
{
        public virtual void getStuff(int id)
        {
            //Get stuff default location
        }
}

public class test2 : test
{
        public override void getStuff(int id)
        {
            //base.getStuff(id);
            //or - Get stuff new location
        }
}

38voto

Devrath Points 2552

Définitions simples de la surcharge et de la surcharge.

Surcharge de travail (Compile Time Polymorphism) : : Fonctions avec le même nom et des paramètres différents

public class A
{
    public void print(int x, int y)
    {
        Console.WriteLine("Parent Method");
    }
}

public class B : A
{
    public void child()
    {
        Console.WriteLine("Child Method");
    }

    public void print(float x, float y)
    {
        Console.WriteLine("Overload child method");
    }
}

Remplacement de (Run Time Polymorphism): : Fonctions dans la classe étendue avec le même nom et les mêmes paramètres que dans la classe de base, mais avec des comportements différents.

public class A
{
    public virtual void print()
    {
        Console.WriteLine("Parent Method");
    }
}

public class B : A
{
    public void child()
    {
        Console.WriteLine("Child Method");
    }

    public override void print()
    {
        Console.WriteLine("Overriding child method");
    }
}

11voto

curiousBoy Points 569

Je voudrais partager avec vous un exemple qui m'a paru très logique lors de mon apprentissage :

Il s'agit juste d'un exemple qui n'inclut pas la méthode virtuelle ou la classe de base. Juste pour donner un indice sur l'idée principale.

Supposons qu'il existe une machine à laver les véhicules et qu'elle possède une fonction appelée "Wash" qui accepte le type Car.

Prend l'entrée de la voiture et lave la voiture.

public void Wash(Car anyCar){
       //wash the car
}

Surchargeons la fonction Wash()

La surcharge :

public void Wash(Truck anyTruck){
   //wash the Truck  
}

La fonction Wash ne lavait auparavant qu'une voiture, mais elle est maintenant surchargée pour laver également un camion.

  • Si l'objet d'entrée fourni est une voiture, il exécutera Wash(Car anyCar)
  • Si l'objet d'entrée fourni est un Truck, alors il exécutera Wash(Camion quelconque)

Remplaçons la fonction Wash()

Chevauchement :

public override void Wash(Car anyCar){
   //check if the car has already cleaned
   if(anyCar.Clean){ 
       //wax the car
   }
   else{
       //wash the car
       //dry the car
       //wax the car
   }     
}

La fonction de lavage comporte désormais une condition permettant de vérifier si la voiture est déjà propre et s'il n'est pas nécessaire de la laver à nouveau.

  • Si la voiture est propre, il suffit de la cirer.

  • Si elle n'est pas propre, il faut d'abord laver la voiture, puis la sécher et enfin la cirer. elle

.

La fonctionnalité a donc été remplacée par l'ajout d'une nouvelle fonctionnalité ou par quelque chose de totalement différent.

9voto

Michael Meadows Points 15277
  • Surcharge = Plusieurs signatures de méthodes, même nom de méthode
  • Overriding = Même signature de méthode (déclarée virtuelle), implémentée dans les sous classes.

Un enquêteur astucieux aurait poursuivi avec :

Quelle est la différence entre la substitution et l'ombrage ?

4voto

Migol Points 3054

Comme l'a dit Michael :

  • Surcharge = Plusieurs signatures de méthodes, même nom de méthode
  • Overriding = Même signature de méthode (déclarée virtuelle), implémentée dans les sous classes.

et

  • Ombrage = Si elle est traitée comme DerivedClass, elle utilise la méthode dérivée, si elle est traitée comme BaseClass, elle utilise la méthode de base.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X