Quelle est la différence entre une surcharge et un dépassement.
c#
inheritance
Kirill Kobelev
la source
la source
Réponses:
Surcharge
La surcharge se produit lorsque vous avez plusieurs méthodes dans la même portée, avec le même nom mais des signatures différentes.
Primordial
Le remplacement est un principe qui vous permet de modifier la fonctionnalité d'une méthode dans une classe enfant.
la source
void
pourgetStuff
danstest2
getStuff(2, "Hello world!");
ou je peux le fairegetStuff("Myname", "Mysurname", "Hello World!");
? N'importe qui peut confirmer que c'est la façon de le faire?Définitions simples pour la surcharge et le remplacement
Overloading (Compile Time Polymorphism) :: Fonctions avec le même nom et des paramètres différents
Overriding (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.
la source
Je veux partager un exemple qui a eu beaucoup de sens pour moi lorsque j'apprenais:
Ceci est juste un exemple qui n'inclut pas la méthode virtuelle ou la classe de base. Juste pour donner une idée de l'idée principale.
Disons qu'il y a une machine à laver de véhicule et qu'elle a une fonction appelée «lavage» et accepte la voiture comme type.
Obtient l'entrée de la voiture et lave la voiture.
Surchargeons la fonction Wash ()
Surcharge:
La fonction de lavage ne lavait qu'une voiture auparavant, mais elle est maintenant surchargée pour laver un camion également.
Remplaçons la fonction Wash ()
Primordial:
La fonction de lavage a maintenant une condition pour vérifier si la voiture est déjà propre et n'a pas besoin d'être lavée à nouveau.
Si la voiture est propre, cirez-la simplement.
Si ce n'est pas propre, lavez d'abord la voiture, puis séchez-la puis cirez-la
.
Ainsi, la fonctionnalité a été remplacée en ajoutant une nouvelle fonctionnalité ou en faisant quelque chose de totalement différent.
la source
Un intervieweur astucieux aurait suivi avec:
Quelle est la différence entre le remplacement et l'observation?
la source
Comme Michael l'a dit:
et
la source
Avoir plus d'une méthode / constructeur avec le même nom mais des paramètres différents est appelé surcharge. Il s'agit d'un événement de compilation.
O / p:
Le remplacement est un événement d'exécution, ce qui signifie qu'en fonction de votre code, la sortie change au moment de l'exécution.
Notez qu'il existe une méthode commune dans les deux classes topSpeed (). Depuis que nous avons instancié une Ferrari, nous obtenons un résultat différent.
O / p:
la source
en C #, il n'y a pas de remplacement caché comme Java , sans remplacement de mot clé sur la méthode de remplacement ! voir ces implémentations C #:
variante 1 sans remplacement : le résultat est 200
variante 2 avec mot-clé override : le résultat est 400
Le mot-clé virtuel sur la classe de voiture est opposé pour final sur Java, signifie non final , vous pouvez remplacer ou implémenter si Car était abstrait
la source
shadowing = maintient deux définitions au niveau de la classe dérivée et afin de projeter la définition de la classe de base, il occulte (masque) la définition de la classe dérivée et vice versa.
la source
Un autre point à ajouter.
Surcharge plus d'une méthode avec le même nom. Type de retour identique ou différent. Différents pas de paramètres ou différents types de paramètres. Dans la même classe ou classe dérivée.
int Add (int num1, int num2) int Add (int num1, int num2, int num3) double Add (int num1, int num2) double Add (double num1, double num2)
Peut être possible dans la même classe ou classe dérivée. Préfère généralement dans la même classe. Par exemple, Console.WriteLine () a 19 méthodes surchargées.
Peut surcharger les constructeurs de classes, les méthodes.
Peut être considéré comme un polymorphisme au moment de la compilation (statique / liaison précoce).
=================================================== =================================================== =
Primordial ne peut pas être possible dans la même classe. Peut remplacer les méthodes de classe, les propriétés, les indexeurs et les événements.
Possède des limitations telles que La méthode de base remplacée doit être virtuelle, abstraite ou remplacée. Vous ne pouvez pas utiliser les modificateurs new, static ou virtual pour modifier une méthode de remplacement.
Peut être considéré comme un polymorphisme d'exécution (liaison dynamique / tardive).
Aide à la gestion des versions http://msdn.microsoft.com/en-us/library/6fawty39.aspx
=================================================== =================================================== =
Liens utiles
http://msdn.microsoft.com/en-us/library/ms173152.aspx Polymorphisme à la compilation vs polymorphisme à l'exécution
la source
La surcharge fait partie du polymorphisme statique et est utilisée pour implémenter différentes méthodes avec le même nom mais des signatures différentes. Le remplacement est utilisé pour terminer la méthode incomplète. À mon avis, il n'y a pas de comparaison entre ces deux concepts, la seule chose est similaire, c'est que les deux viennent avec le même vocabulaire qui est fini.
la source
La surcharge de méthode et le remplacement de méthode sont deux concepts complètement différents. La surcharge de méthode porte le même nom de méthode mais avec des signatures différentes. Le remplacement de méthode modifie l'implémentation par défaut de la méthode de classe de base dans la classe dérivée. Vous trouverez ci-dessous 2 excellents didacticiels vidéo expliquant ces concepts.
Méthode remplaçant Vs masquage
Surcharge de méthode
la source
La surcharge est le concept dans lequel vous avez les mêmes signatures ou méthodes avec le même nom mais des paramètres différents et la substitution, nous avons le même nom, les méthodes avec des paramètres différents ont également l'héritage est connu comme le remplacement.
la source