4
A
回答
9
號在C#中,你可以通過引用語義使用ref
或out
修飾符適用通:
void Foo(ref string s, ref int x)
{
s = "Hello World"; // caller sees the change to s
x = 100; // caller sees the change to x
}
// or, alternatively...
void Bar(out string s)
{
s = "Hello World";
}
這兩者之間的區別,是與out
,該調用者在調用方法時不必指定值,因爲要求被調用方法在退出之前分配一個值。
在C#中,「指針」是你只能在unsafe code中使用的東西。與在C或C++中一樣,C#中的指針允許您引用變量或對象的位置。 C#中的引用是不同的 - 你不應該把它們當作指針 - 它們意圖變得更加不透明,並提供一種「引用」到變量或對象的方式,而不一定意味着它們指示它在內存中的位置。
通過引用,您可以使用特殊關鍵字(out
,ref
)將別名傳遞給變量。這些僅在方法調用的上下文中可用 - 編譯器可以使用關於對象生命週期的信息來確保引用不會超出原始變量的別名。
6
可以使用方法參數關鍵字ref:
void modifyFoo(ref int foo)
{
foo = 42;
}
這樣調用:
int myFoo = 0;
modifyFoo(ref myFoo);
Console.WriteLine(myFoo);
結果:
42
從文檔:
方法參數的ref方法參數關鍵字會導致方法引用傳入方法的相同變量。當控制回到調用方法時,對該方法中的參數所做的任何更改都會反映在該變量中。
要使用ref參數,參數必須顯式作爲ref參數傳遞給方法。 ref參數的值將被傳遞給ref參數。
1
使用ref
。例如。 Foo(ref int i)
將允許Foo
通過引用調用者的值來更改i
的值。
1
指針是正確的方式嗎?
不是在C#中它們不是。使用ref參數:
void Times2(ref int a) { a = a * 2; }
void Foo()
{
int x = 1;
Times2(ref x);
// x is now 2
}
0
如果該值是一個類,它已經通過引用傳遞,並且不需要其他任何東西,除非需要將對象分配給某個東西,val = anotherobject
,那麼您需要使用ref或out關鍵字。如果它是一個結構體(int,float,long,double等),那麼你必須使用ref(如果對象可能改變或不改變)或out(如果對象將被改變)。在由ref或val標記的方法中,可以有多個參數。
相關問題
- 1. 將方法指針作爲整數參數發送到C#的C++方法#
- 2. C++ - 指針函數參數
- 3. C - 放棄指針參數
- 4. 解釋c指針參數
- 5. 函數指針作爲參數在C
- 6. 函數指針和指針參數在C
- 7. 指向C++類方法的指針
- 8. C++。類方法指針
- 9. C++重載方法指針
- 10. 作爲JNA方法參數指向結構數組的指針
- 11. 指針指向參數中的指針C
- 12. 像C++中的C#方法指針
- 13. 指向方法參數中的接口的指針?
- 14. C指針作爲函數的參數
- 15. 指針在功能參數C++
- 16. C++參考指針/指針的替代語法
- 17. C++函數輸入參數與指針比較由指針
- 18. C指針指針數組
- 19. C++函數指針語法
- 20. C++函數指針語法
- 21. C結構的指針作爲參數
- 22. C++ - 指向數組的指針 - 指針
- 23. C void *函數指針參數
- 24. C++可變參數函數指針
- 25. C++與指針參數模板函數
- 26. 數組c和指針參數
- 27. C++函數指針作爲參數
- 28. C++指針引用的方法調用
- 29. 方法params中的指針 - objective-c
- 30. 使用指針數組作爲參數的方法
我認爲這與垃圾收集器有關嗎? – 2010-09-06 18:44:12
我不禁想着不可變的引用類型(字符串)不是展示'ref'參數的最佳主題。 – 2010-09-06 19:45:00