package main
import
"fmt"
type person struct
func
(p person)
setinfovalue()
func
(p *person)
setinfopointer()
func
main()
fmt.
printf
("main: %p, %v\n"
,&p, p)
p.setinfopointer()
//傳統呼叫方式
//儲存方式入口位址
pfunc := p.setinfopointer //這個就是方法值,呼叫函式時,無需再傳遞接收者,隱藏了接收者
pfunc()
//等價於 p.setinfopointer()
vfunc := p.setinfovalue
vfunc()
//等價於 p.setinfovalue()
}
執行結果:
main:
0xc00005a400
,setinfopointer:
0xc00005a400,&
setinfopointer:
0xc00005a400,&
setinfovalue:
0xc00005a4a0
,
package main
import
"fmt"
type person struct
func
(p person)
setinfovalue()
func
(p *person)
setinfopointer()
func
main()
fmt.
printf
("main: %p, %v\n"
,&p, p)
//方法值 f := p.setinfopointer //隱藏了接收者
//方法表示式
f :=
(*person)
.setinfopointer
f(&p)
//顯式把接收者傳遞過去 ====》 p.setinfopointer()
f2 :=
(person)
.setinfovalue
f2(p)//顯式把接收者傳遞過去 ====》 p.setinfovalue()
}
執行結果:
main:
0xc00005a400
,setinfopointer:
0xc00005a400,&
setinfovalue:
0xc00005a480
,
匿名方法與Lambda表示式
匿名方法的概念 這個方法沒有具體的名稱,而只有委託關鍵字 方法引數 方法體,所以稱為匿名方法,匿名方法允許將 塊通過委託變數作為引數傳遞,以代替單獨定義的方法。首先宣告乙個委託 public delegate int calculatordelegate int a,int b 然後使用匿名方法 c...
匿名方法與lambda表示式
匿名方法,從字面上理解即是沒有名字的的方法。用delegate關鍵字進行宣告且只能賦值給乙個委託 for example1 static void main string args ps 經常用作 從c 3.0後又開始使用lambda表示式來代替匿名函式,只要在有委託引數型別的地方就可以使用lamb...
方法宣告 方法變數和方法表示式
方法宣告 方法宣告和普通函式宣告類似,只是在函式名字前多了乙個引數。這個引數把這個方法繫結到引數對應的型別上。type point struct func p point distance q point float64方法變數 函式只需要提供實參而不需要提供接受者就能夠呼叫。p point q p...