c#对象按引用传递或按值传递

莫德代尔

以下代码的输出使我感到惊讶。我认为“ a”应包含对新创建对象的引用。有人可以解释为什么结果不是2吗?

class Program
{
    static void Main(string[] args)
    {
        aclass a = new aclass();
        Process(a);
        Console.WriteLine(a.number);

        Console.ReadLine();
    }

    static void Process(aclass a)
    {
        aclass temp = new aclass();
        temp.number++;
        //Console.WriteLine(temp.number);

        a = temp;
        a.number++;
        //Console.WriteLine(a.number);
    }

}

class aclass
{
    public int number = 0;
}

编辑:这是一个面试问题。我只是意识到我很长时间以来一直误解了这个概念。尽管参数a引用了相同的地址,但它们与原始参数a不同。

劳埃德

您并没有更改实际的原始引用,只是更改了包含在参数中的引用,这些引用有些微不同,更改不会持久化回调用方。您可以使用out更改此行为ref

在这种情况下,您特别想使用它,ref因为您还需要传递参考。

尝试:

class Program
{
    static void Main(string[] args)
    {
        aclass a = new aclass();
        Process(ref a);
        Console.WriteLine(a.number);

        Console.ReadLine();
    }

    static void Process(ref aclass a)
    {
        aclass temp = new aclass();
        temp.number++;
        //Console.WriteLine(temp.number);

        a = temp;
        a.number++;
        //Console.WriteLine(a.number);
    }

}

请记住,您正在使用分配一个全新的参考a = temp如果您只想更新最初传入的现有类,则可以执行以下操作:

a.number = temp.number;
a.number++;

这将消除对的需求ref

您可以在MSDN上阅读更多信息:

传递引用类型参数

ref关键字

关键字

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c#对象按引用传递或按值传递

来自分类Dev

C#按值传递与按引用传递

来自分类Dev

C ++是否按值或引用传递对象?

来自分类Dev

C#是按值传递对象吗?

来自分类Dev

C#是按值传递对象吗?

来自分类Dev

为什么c#对象的行为一次类似于按值传递,而一次按引用传递?

来自分类Dev

Objective-C是按值传递还是按引用传递?

来自分类Dev

Python,Java,C:按引用传递或按值传递

来自分类Dev

C按值传递数组vs按引用传递数组

来自分类Dev

哪个更快?按引用传递与按值传递C ++

来自分类Dev

对在C#中按引用传递和按值传递感到困惑

来自分类Dev

在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

来自分类Dev

C ++中按引用传递对象错误

来自分类Dev

在.NET中,是按值或按引用传递的类对象

来自分类Dev

C:何时按值返回或传递引用

来自分类Dev

C# 的 Queue.dequeue() 是按引用还是按值传递?

来自分类Dev

C ++中的函数重载按值或按引用传递参数

来自分类Dev

按值或引用传递容器

来自分类Dev

在重载函数中按引用传递对象或按值传递对象

来自分类Dev

c#按值传递参数

来自分类Dev

按引用传递(指向对象的指针的向量)是否比按值传递更快?

来自分类Dev

可移动但不可复制的对象:按值传递还是按引用传递?

来自分类Dev

JDBC的Connection和Statement对象是按引用传递还是按值传递?

来自分类Dev

按引用传递(指向对象的指针的向量)是否比按值传递更快?

来自分类Dev

在Javascript中按值传递和按引用传递

来自分类常见问题

python pandas dataframe,是按值传递还是按引用传递

来自分类Dev

在Android Adapter中按值传递和按引用传递?

来自分类Dev

我是否正确理解C中的按值传递和按引用传递?

来自分类Dev

C ++中按引用传递和按值传递之间过载歧义的可行解决方案

Related 相关文章

  1. 1

    c#对象按引用传递或按值传递

  2. 2

    C#按值传递与按引用传递

  3. 3

    C ++是否按值或引用传递对象?

  4. 4

    C#是按值传递对象吗?

  5. 5

    C#是按值传递对象吗?

  6. 6

    为什么c#对象的行为一次类似于按值传递,而一次按引用传递?

  7. 7

    Objective-C是按值传递还是按引用传递?

  8. 8

    Python,Java,C:按引用传递或按值传递

  9. 9

    C按值传递数组vs按引用传递数组

  10. 10

    哪个更快?按引用传递与按值传递C ++

  11. 11

    对在C#中按引用传递和按值传递感到困惑

  12. 12

    在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

  13. 13

    C ++中按引用传递对象错误

  14. 14

    在.NET中,是按值或按引用传递的类对象

  15. 15

    C:何时按值返回或传递引用

  16. 16

    C# 的 Queue.dequeue() 是按引用还是按值传递?

  17. 17

    C ++中的函数重载按值或按引用传递参数

  18. 18

    按值或引用传递容器

  19. 19

    在重载函数中按引用传递对象或按值传递对象

  20. 20

    c#按值传递参数

  21. 21

    按引用传递(指向对象的指针的向量)是否比按值传递更快?

  22. 22

    可移动但不可复制的对象:按值传递还是按引用传递?

  23. 23

    JDBC的Connection和Statement对象是按引用传递还是按值传递?

  24. 24

    按引用传递(指向对象的指针的向量)是否比按值传递更快?

  25. 25

    在Javascript中按值传递和按引用传递

  26. 26

    python pandas dataframe,是按值传递还是按引用传递

  27. 27

    在Android Adapter中按值传递和按引用传递?

  28. 28

    我是否正确理解C中的按值传递和按引用传递?

  29. 29

    C ++中按引用传递和按值传递之间过载歧义的可行解决方案

热门标签

归档