首先,你的伪代码应该工作。但是,在我们开始之前,这里有三件事:值类型,引用类型和“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