第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如果 struct A 嵌入在 B 中,A 上的方法可以訪問(wèn) B 的方法和字段嗎?

如果 struct A 嵌入在 B 中,A 上的方法可以訪問(wèn) B 的方法和字段嗎?

Go
慕桂英3389331 2021-08-16 15:45:22
 struct A {}  func (a *A) BName(id int) string {     return a.Name  }  struct B {     *A     Name string  }  func main() {     b := &B{Name: "abc"}     fmt.Println(b.Name)  }代碼失敗,想知道怎么寫(xiě)代碼實(shí)現(xiàn),A.BName可以訪問(wèn)B struct屬性Name
查看完整描述

2 回答

?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

這不可能。struct A 對(duì)其嵌入的類(lèi)型一無(wú)所知。想想看,A 可以嵌入到任何其他結(jié)構(gòu)中,那么你怎么能提前知道 A 嵌入到的結(jié)構(gòu)的類(lèi)型。


如果要這樣做,則需要將外部結(jié)構(gòu) B 的引用放入 A 中。


type A struct {

    *B 

}


func (a *A) PrintName() string { return a.B.Name }


type B struct {

    A // no need to use a pointer here

    Name string

}


var b B

b.A.B = &b


fmt.Println(b.PrintName())


查看完整回答
反對(duì) 回復(fù) 2021-08-16
?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊

A訪問(wèn)B讓我想起了 is-a 關(guān)系,其中A"is-a" B。


文章“ Go 是一種面向?qū)ο蟮恼Z(yǔ)言嗎? ”確實(shí)指出Go 中沒(méi)有真正的子類(lèi)型:


如果它真的是子類(lèi)型,那么匿名字段將導(dǎo)致外部類(lèi)型成為內(nèi)部類(lèi)型。在 Go 中,情況并非如此。這兩種類(lèi)型仍然不同。

匿名字段仍然可以訪問(wèn),就像它們被嵌入一樣

例子:


package main


type A struct{

    // doesn't know anything about B

}


type B struct {

    A  //B is-a A

}


func (a *A) f() { fmt.Println("A.f") }

func (b *B) f() { fmt.Println("B.f") }


func save(A) {

    //do something

}


func main() {

    b := B

    save(&b)  //OOOPS! b IS NOT A

    b.f()     // B.f()

    b.A.f()   // A.f()

}

多重繼承的問(wèn)題之一是,當(dāng)相同的方法存在于多個(gè)父類(lèi)上時(shí),語(yǔ)言通常不明顯,有時(shí)甚至不明確使用哪些方法。


使用 Go,您始終可以通過(guò)與類(lèi)型同名的屬性訪問(wèn)各個(gè)方法。


實(shí)際上,當(dāng)您使用匿名字段時(shí),Go 正在創(chuàng)建一個(gè)與您的類(lèi)型同名的訪問(wèn)器。


這就是“ b.A”:匿名字段的訪問(wèn)者..


查看完整回答
反對(duì) 回復(fù) 2021-08-16
  • 2 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)