Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka

Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka

王林
王林ke hadapan
2024-02-09 16:39:14930semak imbas

Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka

Dalam PHP, antara muka ialah kelas abstrak yang mentakrifkan satu set kaedah. Kita boleh memastikan bahawa kelas mempunyai tingkah laku tertentu dengan melaksanakan antara muka. Walau bagaimanapun, kadangkala kita perlu mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Ini mungkin menyebabkan kekeliruan dalam sesetengah kes. Jadi, artikel ini akan menunjukkan kepada anda cara mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan membantu anda. Seterusnya, mari kita turun ke perniagaan dan terokai penyelesaian kepada masalah ini.

Kandungan soalan

Saya cuba memahami cara kaedah, antara muka dan jenis konkrit berfungsi semasa.

Sebagai contoh, di sini.

Kod saya ialah:

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}

Jadi antara muka melaksanakan i.

Dalam kod pelanggan:

i := somefunction(....) // i is of type I
i.MyMethod(....)

Bagaimana untuk mendapatkan rujukan kepada a daripada i ?

Penyelesaian

  • Satu set tandatangan kaedah disimpan dalam jenis antara muka. Sebarang pelaksanaan kaedah yang ditakrifkan dalam antara muka boleh disimpan sebagai nilainya.

  • Jika pembolehubah ditakrifkan menggunakan jenis antara muka, boleh mengakses kaedah yang ditakrifkan dalam antara muka dan kaedah lain yang dikaitkan dengan jenis yang dilaksanakan tidak boleh diakses .

Antaramuka:

type i interface {
    value() string
}

Perlaksanaan:

type a string

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

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

Dalam kod pelanggan:

    // 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()

Nota: Jika anda menggunakan Penerima Penunjukkaedah pelaksanaan seperti yang ditunjukkan di bawah. Anda perlu menetapkan penunjuk yang dilaksanakan kepada i.

Perlaksanaan:

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

Dalam kod pelanggan:

 a := A("a")
 var i I = &a 

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam