如何在C#中传递引用?
答案 0 :(得分:7)
private void functionName (ref Type variableName)
{
}
致电
functionName(ref variable);
答案 1 :(得分:5)
你的问题非常不清楚,但很有可能我的article on parameter passing in C#会回答你真正打算提出的问题。
特别是,您需要区分通过值传递引用,并通过引用传递参数 。如果您对值类型和引用类型感到朦胧,您可能还需要查看my article on that topic。
答案 2 :(得分:3)
您可以使用此语法在C#中通过引用传递参数。
public void MyMethod(ref string myString)
{
}
然后,您需要在传递值时将ref放在值之前。
答案 3 :(得分:2)
Jon Skeet有一篇关于这个here的好文章。
在C#中,默认情况下,值传递值类型(如int,double,byte和structs)。这意味着接收方法具有该类型的NEW实例。如果将值为1的int传递给方法,并且方法将其更改为2,则此更改仅反映在方法中,调用位置的int仍为1.如果添加了ref关键字,则更改对该整数进行的反射将反映回调用位置。
C#中的所有类都是引用类型。这意味着,默认情况下,引用按值传递。这是重要的部分。这意味着,对该对象实例所做的更改将反映回调用位置,因为它是同一个对象。但是,如果方法更改了对不同对象的引用,则不会反映此更改。如果您想要反映这些更改,则需要在参数上使用ref关键字。
public static void Main()
{
int i = 1;
Method1(i); //i here is still 1
Method2(ref i); //i is now 2
SimpleObj obj = new SimpleObj();
obj.Value = 1;
Method3(obj); //obj.Value now 2
Method4(obj); // obj.Value still 2
Method5(ref obj); //obj.Value now 5
}
private static void Method5(ref SimpleObj obj)
{
obj = new SimpleObj();
obj.Value = 5;
}
private static void Method4(SimpleObj obj)
{
obj = new SimpleObj();
obj.Value = 5;
}
private static void Method3(SimpleObj obj)
{
obj.Value++;
}
private static void Method2(ref int i)
{
i++;
}
private static void Method1(int i)
{
i++;
}
public class SimpleObj
{
public int Value { get; set; }
}
ref
关键字在C#3.0规范的第10.6.1.2节中介绍。 Here是msdn文档。
答案 4 :(得分:0)
以下是C#中传递参数的一个很好的概述:
答案 5 :(得分:0)
致电代码:
string companyName = "New Company";
GetEmail(ref companyName);
方法代码:
private void GetEmail(ref string companyName)
{
}
答案 6 :(得分:-1)
您的问题不明确,但我想指出,在C#中,默认情况下会通过引用传递对象。意思是,如果你有一个对象,然后将该对象传递给一个对该对象进行更改的方法,那么这些更改也会影响调用代码中的对象,因为它们都引用同一个对象。