Maison > développement back-end > Golang > Comment obtenir une référence à un type concret à partir d'une référence à une interface

Comment obtenir une référence à un type concret à partir d'une référence à une interface

王林
Libérer: 2024-02-09 16:39:14
avant
958 Les gens l'ont consulté

Comment obtenir une référence à un type concret à partir dune référence à une interface

En PHP, une interface est une classe abstraite qui définit un ensemble de méthodes. Nous pouvons garantir qu'une classe a un comportement spécifique en implémentant une interface. Cependant, nous avons parfois besoin d’obtenir une référence à un type concret à partir d’une référence à une interface. Cela peut créer une certaine confusion dans certains cas. Ainsi, cet article va vous montrer comment obtenir une référence à un type concret à partir d’une référence à une interface. Que vous soyez débutant ou développeur expérimenté, cet article vous aidera. Passons ensuite aux choses sérieuses et explorons la solution à ce problème.

Contenu de la question

J'essaie de comprendre comment fonctionnent les méthodes, les interfaces et les types concrets.

Par exemple, ici.

Mon code est :

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}
Copier après la connexion

Donc, une interface implémente i.

Dans le code client :

i := somefunction(....) // i is of type I
i.MyMethod(....)
Copier après la connexion

Comment obtenir une référence à a depuis i ?

Solution

  • Un ensemble de signatures de méthode est stocké dans un type d'interface. Toute implémentation d'une méthode définie dans une interface peut être stockée comme valeur.

  • Si une variable est définie à l'aide d'un type d'interface, peut accéder aux méthodes définies dans l'interface et les autres méthodes associées au type implémenté ne sont pas accessibles .

Interface :

type i interface {
    value() string
}
Copier après la connexion

Mise en œuvre :

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

Copier après la connexion

Dans le code client :

    // define a variable with the type of i.
    var a i = a("a") 

    // method value() defined in the i interface can be
    // called.
    value := a.value()

     // method type() can not be called, because it is not defined in the interface.
    typ := a.type()

Copier après la connexion

Remarque : Si vous utilisez la méthode d'implémentation Pointer Receiver comme indiqué ci-dessous. Vous devez attribuer le pointeur implémenté à i.

Mise en œuvre :

type a string
func(a *a) value() string {
  return string(a)
}
Copier après la connexion

Dans le code client :

 a := A("a")
 var i I = &a 
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal