主要有兩種方法來實現在型別中嵌入功能:
a:聚合(或組合):包含乙個所需功能型別的具名字段。
b:內嵌:內嵌(匿名地)所需功能型別,像前一節 10.6
.5 所演示的那樣。
為了使這些概念具體化,假設有乙個 customer 型別,我們想讓它通過 log 型別來包含日誌功能,log 型別只是簡單地包含乙個累積的訊息(當然它可以是複雜的)。如果想讓特定型別都具備日誌功能,你可以實現乙個這樣的 log 型別,然後將它作為特定型別的乙個字段,並提供 log(),它返回這個日誌的引用。
方式 a 可以通過如下方法實現(使用了第 10.7 節中的 string() 功能):
package main
import (
"fmt"
)type
log struct
type customer struct
func main() }
// fmt.println(c) &
c.log().add("2 - after me the world will be a better place!")
fmt.println(c.
log())
}func (l *
log) add(s string)
func (l *
log) string() string
func (c *customer) log() *
log
輸出
1 - yes we can!
2 - after me the world will be a better place!
相對的方式 b 可能會像這樣:
package main
import (
"fmt"
)type
log struct
type customer struct
func main() }
c.add("2 - after me the world will be a better place!")
fmt.println(c)
}func (l *
log) add(s string)
func (l *
log) string() string
func (c *customer) string() string
結果
barak obama
log:
內嵌的型別不需要指標,customer 也不需要 add 方法,它使用 log 的 add 方法,customer 有自己的 string 方法,並且在它裡面呼叫了 log 的 string 方法。
如果內嵌型別嵌入了其他型別,也是可以的,那些型別的方法可以直接在外層型別中使用。
因此乙個好的策略是建立一些小的、可復用的型別作為乙個工具箱,用於組成域型別。
如何在VC中嵌入IE
一 需要在你的程式中嵌入ie瀏覽器的視窗。有兩種實現方法,其一,新增chtmlview的視類 其二,新增ie瀏覽器的activex控制項。其實不管用什麼方法,除了函式名稱稍有區別外,它們最終都呼叫了微軟的iwebbrowser2的介面。二 方法和步驟 1.建立乙個對話窗形式的mfc應用程式,注意在導...
如何在WPF中嵌入Winform控制項
當時把wpf的控制項canvas的handle傳給c 的專案去重新整理影象的時候發現最後重新整理的是整個wpf頁面而不是控制項所在的區域,還不知道有什麼辦法可以解決。不過可以在wpf中嵌入winform的影象控制項picturebox去做重新整理。嵌入方法 1.在專案的references中加入wi...
如何在django中新增日誌功能
官方文件 猛戳這裡 在settings中配置以下 logging dir 日誌檔案存放目錄 logging dir logs 日誌存放路徑 if not os.path.exists logging dir os.mkdir logging dir import logging logging fi...