Maison > développement back-end > Golang > le corps du texte

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
891 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!

source:stackoverflow.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!