今天在瀏覽博文時,看到這篇文章:
c#中的ref 傳進出的到底是什麼 ? 在傳物件時使用ref的疑問
另附言:
本文寫於早上,就在想發布的那瞬間,靠,公司斷網了,原來修改的部分丟失了。
網一斷就是一天了,現在回到家才把之發布。
最近有人在看我 cyq.data 框架 的時候說起,既然class是引用位址,本身傳的就是位址,你**中還要寫ref傳遞來幹什麼;
原來以前明白的,被忽悠一下變不明白了,還以為自己原來的**寫錯了。
今天在幫人家解惑時,才把自己的惑給解了。
這裡我把上篇文章原問題的**小修改了一下
貼出來做示例:
//////
by 路過秋天
///
class
program
static
void
change(person p)
static
void
change(person p,
string
name)
static
void
change(
refperson p)}
這裡順便截圖讓大夥看看是怎麼除錯而解惑的。
f5執行:
1:我們執行到第一行**,斷點:
重點說明:
2:我們執行到change(p)內部中
簡單說:你這內部的p和外面的p都不一樣,所以不會影響外面p的位址。
備註p值的位址變化了,是因為斷點在第一行**時還沒執行例項化,所以其值是一樣的。
於是第一行結果輸出:張三
3:接下來執行到change(p,"李四") 函式內部
重點說明:這裡內部的p的位址還是發生了變化,變成了0x044becd0
然而其指向的值是一樣的,所以你把值改了,所以「李四」就出來了。
備註:內部的p和外面的p雖然不一樣,但是指向的值是一樣的。
於是第一行結果輸出:李四
4:最後是 change(ref p) 函式內部
重點說明:
這裡內部的p位址和外部的p位址是一樣的,沒有發生變化
。然後重新指向乙個新的物件,只是物件的值位址發生了變化。
備註:外部p位址=內部p位址,所以其指向的值都是新的物件的值。
於是第三行結果輸出:張三
最終結果圖如下:
最後結言:
對於class型別使用 ref,是為了保持引用的位址是一致的。
所以,不要僅僅意識到引用型別傳位址,值型別傳值就了事了,要切切的注意到,引用型別傳址時,內部傳參會產生乙個新位址。
所以我們在傳遞類引用時,喜歡在內部使用 new的民工們得注意注意了。
這裡似乎也是傳參領域的問題,只是附上了 ref 。
C 中的 ref 傳進出的到底是什麼 解惑篇
今天在瀏覽博文時,看到這篇文章 c 中的ref 傳進出的到底是什麼 在傳物件時使用ref的疑問 另附言 本文寫於早上,就在想發布的那瞬間,靠,公司斷網了,原來修改的部分丟失了。網一斷就是一天了,現在回到家才把之發布。最近有人在看我 cyq.data 框架 的時候說起,既然class是引用位址,本身傳...
C 中的委託到底是什麼概念??
委託,簡單理解是這樣的.比如您要管您的孩子,把孩子送進了幼兒園.ok.此時您就把您的孩子委託給了幼兒園.當幼兒園放學,將孩子交還給您的手中.則是委託的 當然我這裡的例子是說非同步委託呼叫.您也可以同步.什麼是同步委託呼叫?您去銀行存錢.把錢給櫃員.他們幫你點鈔.存款然後給您存摺或卡.那麼您就相當於把...
Vue vue中的 attrs到底是什麼?
先來看看官方文件給的定義 包含了父作用域中不作為 prop 被識別 且獲取 的 attribute 繫結 class和style除外 當乙個元件沒有宣告任何 prop 時,這裡會包含所有父作用域的繫結 class和style除外 並且可以通過v bind attrs 傳入內部元件 在建立高階別的元件...