c# - 如何在 C# 中传递 const 引用?

标签 c# reference constants

在 C++ 中,传递 const 引用是一种常见的做法 - 例如:

#include <iostream>
using namespace std;

class X
{
  public :
    X()                              {m_x = 0; }
    X(const int & x)                 {m_x = x; }
    X(const X & other)               { *this = other; }
    X & operator = (const X & other) { m_x = other.m_x; return *this; }
    void print()                     { cout << m_x << endl; }
  private :
    int m_x;
};

void main()
{
    X x1(5);
    X x2(4);
    X x3(x2);
    x2 = x1;
    x1.print();
    x2.print();
    x3.print();
}

这个非常简单的例子说明了它是如何完成的 - 差不多。但是我注意到在 C# 中似乎并非如此。我必须在 C# 中传递 const 引用吗?我需要“ref”关键字做什么?请注意,我知道并理解什么是 C# 引用和值类型。

最佳答案

回答您问题的引用部分;当您将变量传递给方法时,会创建该变量的副本。使用 ref 关键字将传递该变量的相同实例,以便该方法能够为调用者更新该变量。

很多人似乎认为这只适用于值类型,因为引用类型只是作为引用传递,所以 ref 关键字没有任何作用。然而,事实并非如此,引用 以与值相同的方式传递给方法;它被复制并创建了 reference 的新实例。这意味着调用者将看到对对象本身的修改,而不是对引用的修改。因此,如果您尝试将对象设置为 null 或一个新对象,如果不使用 ref 关键字,调用者将看不到此修改:

没有引用:

void UpdatePerson(Person person)
{
   // Caller would see this change
   person.Name = "Bob";
   // Caller wouldn't see this change
   person = null;
}

引用

void UpdatePerson(ref Person person)
{
   // Caller would see this change
   person.Name = "Bob";
   // Caller would see this change
   person = null;
}

关于c# - 如何在 C# 中传递 const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385224/

相关文章:

c# - 在 VS 中向 "Add Reference"对话框添加一个选项卡?

C++ : Will compiler optimize &Variable; away?

Perl 哈希值 : $hash{key} vs $hash->{key}

mysql - 无法解析接近的表名

c++ - 允许成员为 const,同时仍然支持类上的 operator=

c - 是否有一种可移植的方法可以让函数使用参数 'const' 作为返回值?

c# - 通过 Java(或 C#)发送 MAPI 电子邮件

c# - 如何检查参数是否与 C# 中枚举中的值匹配?

c# - SQLServerCE 无法在 select 语句中使用 rtrim - SQLCEException

c++ - Global const string& 对我来说很难闻,它真的安全吗?