out
變量引用可以用未賦值變量的地址初始化,但ref
變量不能這樣做,使得out
優於ref
。那麼需要什麼ref
?爲什麼都出&ref?
回答
問題是因爲out函數必須在函數結束前被初始化或賦值。基本上這樣你就不會忘記設置變量。
static void Method(out int pointer)
{
pointer = 5; //Initialize or assign to fix the error
}
檢查此鏈接:
理念仍然你在做什麼是引用類型正確通過傳遞前初始化,但出來的調用方法需要返回
之前賦值嘗試刪除主方法中的賦值,然後使用Ref,您將得到差異,這將再次導致編譯錯誤
看起來像一個斷開的鏈接。 – 2018-01-12 20:42:42
我的理解是,out參數是通過被調用的方法設置的,而不是傳遞給方法。
所以這將是有效的:
class Program
{
static void Main(string[] args)
{
int integer;
Method(out integer);
// integer is now 9
}
static void Method(out int pointer)
{
...
pointer = 9;
}
}
// Option 2:
class Program
{
static void Main(string[] args)
{
int integer = 9;
Method(integer);
}
static void Method(int pointer)
{
//Do something with pointer = 9
}
}
正如你說,你是知道有關的差異,因此我假設你也是知道的事實說出來的參數必須分配。
因此,我相信你想知道爲什麼需要分配out參數。
out關鍵字 - 這意味着你正在使用這個參數來輸出一些東西。
考慮,int add(int x,inty)。如果此方法不會返回任何應用程序。這裏我們也聲明瞭一個合約,該方法返回整數。同樣如果out關鍵字的情況下,我們正在定義一個out變量將被分配並將作爲輸出提供的合同。
爲什麼我們需要更新? 這是因爲我們明確地將其標記爲out參數,因此我們確信我們將分配一個值並將其返回。如果有情況我們沒有任何可分配的東西,而且我們仍在使用論據,那麼我確信我們有設計問題。
ref關鍵字: - 這意味着您傳遞參考。它絕不意味着你會分配它並提供一些輸出。你可以用這種方式使用它,但它不是合同。你有一個參數的參考,你可以做任何事情。在C#參數默認情況下通過值傳遞。 ref關鍵字給你一種通過引用傳遞參數的方法。
您可以瞭解更多關於ref關鍵字here的信息。
希望這會有所幫助。
如果你只想通參數通過引用的函數,你應該使用ref
:
class Program
{
static void Main(string[] args)
{
int integer = 9;
Method(ref integer);
}
static void Method(ref int pointer)
{
}
}
這通常編譯。
- 1. 從r值ref轉換爲l值ref,爲什麼它有效?
- 2. 爲什麼rval ref綁定到lval ref函數?
- 3. Clojure:爲什麼Ref在Assoc上丟失
- 4. 爲什麼UdpClient.Receive需要ref參數?
- 5. 爲什麼'ref'和'out'支持多態?
- 6. 爲什麼NUnit的Assert.That(..)有ref重載?
- 7. 爲什麼我的JavaScript for循環輸出什麼都沒有
- 8. 爲什麼Me.components什麼都沒有?
- 9. 爲什麼hibernate什麼都不做?
- 10. 爲什麼AVIStreamRead什麼都不讀?
- 11. 爲什麼grep什麼都不返回?
- 12. 爲什麼networkx.draw()什麼都不產生?
- 13. 爲什麼gridview.selectedColumns什麼都沒有?
- 14. 什麼?ref = rua在Facebook上?
- 15. `&`和`ref`有什麼區別?
- 16. React中的ref是什麼?
- 17. 什麼都爲iPhone開發
- 18. 爲什麼都稱爲對象?
- 19. 爲什麼msft比較Interlocked.Increment(ref uniqueId)爲零?
- 20. 試圖減少mysql查詢,爲什麼'ref'爲NULL?
- 21. WordPress the_permalink()什麼都沒輸出
- 22. tkinter窗口什麼都沒有出現
- 23. Visual c#什麼都沒有出現
- 24. jQuery getJSON輸出什麼都沒有
- 25. PocketSphinx輸出什麼都沒有
- 26. 什麼是在ref中彈出PersistentQueue的慣用方法?
- 27. C#爲什麼部分方法可以使用ref,但不出來?
- 28. 爲什麼我無法使用Type.InvokeMember檢索輸出或ref參數的值?
- 29. 爲什麼我的輸出每次都是空的?
- 30. 爲什麼settings.settings和app.config中都會出現默認值?
正確的答案是「因爲它是」。這就是'out'的定義。 – Mephy 2014-10-12 05:05:33
@Mephy還有5人聚集在一起提供答案。 – mihai 2014-10-12 05:17:50
@Mephy no offens,你可以請轉發的鏈接,定義這種行爲的參數。爲更好地理解 – 2014-10-12 05:22:41