[英]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.