簡體   English   中英

如何在C#中傳遞const引用?

[英]How do I pass a const reference in C#?

在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關鍵字沒有效果。 但是,事實並非如此, 引用以與值相同的方式傳遞給方法; 它被復制並創建了該引用的新實例。 這意味着調用者將看到對象本身的修改,但不會看到對引用的修改。 因此,如果您嘗試將對象設置為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#沒有const對象的概念(即你無法修改的對象); 只有變量(即字段)可以是常量或只讀 - 意味着您無法分配它們。

ref關鍵字在概念上將對變量的引用作為參數傳遞,即被調用者可以修改變量(而不僅僅是修改值)。 這對於原始類型(int,bool等)特別有用。

從C#7.2開始,可以使用in關鍵字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM