Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa jenis alias mewarisi kaedah daripada jenis terbenam tetapi bukan daripada jenis mentah?

Mengapa jenis alias mewarisi kaedah daripada jenis terbenam tetapi bukan daripada jenis mentah?

Barbara Streisand
Barbara Streisandasal
2024-11-16 09:50:03328semak imbas

Why does a type alias inherit methods from an embedded type but not from a raw type?

Memahami Kesan Jenis Alias ​​pada Pewarisan Kaedah

Taip alias, aspek biasa bahasa pengaturcaraan seperti Go, menyediakan cara yang mudah untuk buat pengecam baharu untuk jenis sedia ada. Walau bagaimanapun, tingkah laku mereka dari segi pewarisan kaedah boleh mengelirukan.

Pertimbangkan kod Go berikut:

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
}

Kod tersebut mengisytiharkan tiga jenis: dur, durWithMethods dan durWithoutMethods. Jenis dur ialah masa pemasukan struct.Duration. Jenis durWithMethods ditakrifkan sebagai alias untuk dur. Taip durWithoutMethods, sebaliknya, adalah alias untuk masa.Duration.

Timbul persoalan mengapa durWithMethods mewarisi kaedah String() dari masa.Duration manakala durWithoutMethods tidak.

Jenis Pengisytiharan dan Pewarisan Kaedah

Dalam Go, pengisytiharan taip terbahagi kepada dua kategori: takrif taip dan alias taip.

  • Takrifan taip cipta baharu jenis dan buang kaedah yang diwarisi.
  • Taip alias hanya mengikat pengecam baharu kepada jenis sedia ada.

Dalam kes ini, dur ialah definisi jenis manakala kedua-duanya durWithMethods dan durWithoutMethods ialah alias jenis.

Kesan pada Pewarisan Kaedah

Apabila jenis baharu dicipta menggunakan definisi jenis, seperti dur, ia kehilangan semua kaedah yang diwarisi. Ini bermakna dur tidak mempunyai kaedah String() masa. Tempoh. Walau bagaimanapun, apabila jenis baharu dibuat menggunakan alias jenis, seperti durWithMethods, ia mewarisi semua kaedah jenis asas, dalam kes ini dur.

Masa. Tempoh dan Jenis Mentah

masa. Tempoh adalah jenis mentah, bermakna ia tidak boleh mempunyai kaedah. Walau bagaimanapun, ia boleh dibenamkan dalam struct seperti dur, yang membenarkan struct untuk mewarisi kaedahnya.

Taip Alias ​​lwn. Alias ​​Langsung

durWithoutMethods ialah alias langsung masa.Tempoh. Tingkah laku pelucutan jenis ini adalah unik untuk alias langsung dan tidak digunakan untuk menaip alias seperti durWithMethods.

Kesimpulannya, manakala durWithMethods mewarisi masa. Kaedah String() Duration kerana ia merupakan alias untuk jenis yang membenamkan masa .Tempoh, durWithoutMethods tidak mewarisi kaedah ini kerana ia adalah alias langsung daripada jenis mentah.

Atas ialah kandungan terperinci Mengapa jenis alias mewarisi kaedah daripada jenis terbenam tetapi bukan daripada jenis mentah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn