Comprendre l'impact des alias de type sur l'héritage des méthodes
Les alias de type, un aspect courant des langages de programmation comme Go, offrent un moyen pratique de créer de nouveaux identifiants pour les types existants. Cependant, leur comportement en termes d'héritage de méthode peut prêter à confusion.
Considérez le code Go suivant :
package main import ( "fmt" "time" ) type dur struct { time.Duration } type durWithMethods dur type durWithoutMethods time.Duration func main() { var d durWithMethods // works ?? fmt.Println(d.String()) var dWM durWithoutMethods fmt.Println(dWM.String()) // doesn't compile }
Le code déclare trois types : dur, durWithMethods et durWithoutMethods. Le type dur est une structure intégrant time.Duration. Le type durWithMethods est défini comme un alias pour dur. Tapez durWithoutMethods, en revanche, est un alias pour time.Duration.
La question se pose de savoir pourquoi durWithMethods hérite de la méthode String() de time.Duration alors que durWithoutMethods ne le fait pas.
Déclarations de type et héritage de méthode
En Go, les déclarations de type tombent en deux catégories : les définitions de types et les alias de types.
Dans ce cas, dur est une définition de type tandis que les deux durWithMethods et durWithoutMethods sont des alias de type.
Impact sur l'héritage des méthodes
Lorsqu'un nouveau type est créé à l'aide d'une définition de type, comme dur, il perd toutes les méthodes héritées. Cela signifie que dur ne possède pas intrinsèquement la méthode String() de time.Duration. Cependant, lorsqu'un nouveau type est créé à l'aide d'un alias de type, comme durWithMethods, il hérite de toutes les méthodes du type sous-jacent, dans ce cas dur.
Time.Duration et Raw Types
time.Duration est un type brut, ce qui signifie qu'il ne peut pas avoir de méthodes. Cependant, il peut être intégré dans une structure comme dur, ce qui permet à la structure d'hériter de ses méthodes.
Type Alias vs. Direct Alias
durWithoutMethods est un alias direct de temps.Durée. Ce comportement de suppression de type est unique aux alias directs et ne s'applique pas aux alias de type comme durWithMethods.
En conclusion, alors que durWithMethods hérite de la méthode String() de time.Duration car il s'agit d'un alias pour un type qui intègre le temps .Duration, durWithoutMethods n'hérite pas de cette méthode car il s'agit d'un alias direct de type brut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!