如何在c#中的方法中将引用作为参数传递

时间:2009-06-17 14:59:38

标签: c# console

如何在C#中传递引用?

7 个答案:

答案 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#中传递参数的一个很好的概述:

http://www.yoda.arachsys.com/csharp/parameters.html

答案 5 :(得分:0)

致电代码:

string companyName = "New Company";
GetEmail(ref companyName);

方法代码:

private void GetEmail(ref string companyName)
{

}

答案 6 :(得分:-1)

您的问题不明确,但我想指出,在C#中,默认情况下会通过引用传递对象。意思是,如果你有一个对象,然后将该对象传递给一个对该对象进行更改的方法,那么这些更改也会影响调用代码中的对象,因为它们都引用同一个对象。