首先,你的僞代碼應該工作。但是,在我們開始之前,這裏有三件事:值類型,引用類型和「ref」關鍵字。
值類型通常是你簡單的基本類型,如int,double等。字符串是一個奇怪的類型,因爲它被認爲是一個值類型。
更復雜的類型,如數組和類是引用類型。
當您傳遞值類型如int和double時,則傳遞值的副本,所以如果將int x = 10傳遞給方法,則在離開方法後,方法中的x更改將不會反映出來。另一方面,如果您通過MyClass class1,則屬性 class1中的任何更改都將反映在該函數之外。只是不要嘗試在你的方法中新建一個新的class1,因爲這在調用者之外不會改變。
如果您想更改方法中的值類型,請通過ref。如果你想新建一個新的類或數組,那麼你通過ref。
還有一件事:它不是使用之間與參考之間的黑白。只有當方法的設計始終只在方法內創建類或數組時,纔會使用它。如果你想允許創建一個新的對象,你可以在引用類型上使用ref。像,
//function definition
void foo (ref string[] temp)
{
if(temp == null)
{
temp = new string[] { "Hello World ", "You must be updated now" };
}
else
{
// do something with the existing temp
}
}
最後,如果這是你的實際代碼:
string[] temp = null;
foo(ref temp);
foreach (string s in temp)
System.Console.WriteLine(s);
後來:
//function definition
void foo (ref string[] temp)
{
temp = new string[] { "Hello World ", "You must be updated now" };
}
然後,它實際上應該工作。
這樣的社區,我閱讀所有的答案,並學到很多 – 2012-03-19 17:34:02
那麼,爲什麼你的代碼沒有工作? – 2012-03-19 17:41:44
我的代碼有效,我需要理解這個概念,我是C++開發人員,通過學習它的基本概念來學習新的語言。 – 2012-03-19 17:50:56