Quelle est la différence entre surcharge et surcharge.
Réponses
Trop de publicités?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
}
}
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");
}
}
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.
- 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 ?
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.
- Réponses précédentes
- Plus de réponses