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

C# 如何在c中的方法中将引用作为参数传递,c#,console,C#,Console,你如何用C语言传递推荐信 private void functionName (ref Type variableName) { } 叫它 functionName(ref variable); 叫它 functionName(ref variable); 可以使用此语法在C中通过引用传递参数 public void MyMethod(ref string myString) { } 然后,在传递参数时,需要将ref置于值之前。可以使用此语法在C中通过引用传递参数 public vo

你如何用C语言传递推荐信

private void functionName (ref Type variableName)
{

}
叫它

functionName(ref variable);
叫它

functionName(ref variable);

可以使用此语法在C中通过引用传递参数

public void MyMethod(ref string myString)
{

}

然后,在传递参数时,需要将ref置于值之前。

可以使用此语法在C中通过引用传递参数

public void MyMethod(ref string myString)
{

}

然后,在传递参数时,需要将ref置于值之前。

下面是在C中传递参数的一个很好的概述:


下面是在C中传递参数的一个很好的概述:


你的问题非常不清楚,但我很可能会回答你真正想问的任何问题


特别是,您需要区分按值传递引用和按引用传递参数。如果您对值类型和引用类型不清楚,您可能还想看看。

您的问题非常不清楚,但我很可能会回答您真正想问的任何问题

特别是,您需要区分按值传递引用和按引用传递参数。如果您对值类型和引用类型不太清楚,您可能还需要查看。

调用代码:

string companyName = "New Company";
GetEmail(ref companyName);
方法代码:

private void GetEmail(ref string companyName)
{

}
呼叫代码:

string companyName = "New Company";
GetEmail(ref companyName);
方法代码:

private void GetEmail(ref string companyName)
{

}

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

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

Jon Skeet对此有一篇很好的文章

在C中,默认情况下,int、double、byte和structs等值类型是按值传递的。这意味着接收方法具有该类型的新实例。如果将值为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; }
    }

C 3.0规范第10.6.1.2节介绍了ref关键字。是msdn文档。

Jon Skeet在这方面有一篇很好的文章

在C中,默认情况下,int、double、byte和structs等值类型是按值传递的。这意味着接收方法具有该类型的新实例。如果将值为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; }
    }

C 3.0规范第10.6.1.2节介绍了ref关键字。是msdn文档。

并且在调用方法SomeMethodref variableName时一定要使用ref关键字;并且确保在调用方法SomeMethodref variableName时也使用ref关键字;您是指命令行参数吗?查看Main方法。或者你的意思是通过参考传递?Main方法-传递参数-您是指命令行参数-查看Main方法。或者你的意思是通过参考传递?Main方法-传递参数-可能值得一提的是,传递对象时[通常]不需要此方法,仅传递灵长类。可能值得一提的是,传递对象时[通常]不需要此方法,仅传递灵长类。在C中,默认情况下对象是通过引用传递的:这不是真的。。。除非指定“ref”修饰符,否则它们将按值传递。我认为您混淆了引用类型和值类型之间的区别,以及传递参数之间的区别
通过引用或值来定义。当按值传递引用类型作为参数时,按值传递引用;被调用的函数不能修改这个引用,但是它可以修改被引用的对象。当人们更改一个没有通过引用传入的对象的状态时,我发现这很有趣。真正使代码清晰明了。@Thomas。。你只是吹毛求疵。。。基元类型通过值传递,对象通过引用传递。是的,对对象本身的引用是按值传递的,但实际对象本身不会被复制,而是发送对它的引用。这就是为什么我说对象是通过引用传递的。在C中,默认情况下对象是通过引用传递的:这不是真的。。。除非指定“ref”修饰符,否则它们将按值传递。我认为您混淆了引用类型和值类型之间的区别,以及按引用或值传递参数之间的区别。当按值传递引用类型作为参数时,按值传递引用;被调用的函数不能修改这个引用,但是它可以修改被引用的对象。当人们更改一个没有通过引用传入的对象的状态时,我发现这很有趣。真正使代码清晰明了。@Thomas。。你只是吹毛求疵。。。基元类型通过值传递,对象通过引用传递。是的,对对象本身的引用是按值传递的,但实际对象本身不会被复制,而是发送对它的引用。这就是为什么我说对象是通过引用传递的。