如何在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(); } #包括 使用名称空间std; X类 { 公众: X(){m_X=0;} X(常数int&X){m_X=X;} X(常数X&other){*this=other;} X&operator=(constx&other){m_X=other.m_X;返回*this;} 无效打印(){cout
C#没有常量对象(即您不能修改的对象)的概念;只有变量(即字段)可以是常量或只读的,这意味着您不能分配给它们如何在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(); } #包括 使用名称空间std; X类 { 公众: X(){m_X=0;} X(常数int&X){m_X=X;} X(常数X&other){*this=other;} X&operator=(constx&other){m_X=other.m_X;返回*this;} 无效打印(){cout,c#,reference,constants,C#,Reference,Constants,C#没有常量对象(即您不能修改的对象)的概念;只有变量(即字段)可以是常量或只读的,这意味着您不能分配给它们 ref关键字在概念上传递对变量的引用作为参数,即被调用方可以修改变量(而不仅仅是修改值)。这对于基本类型(int、bool等)特别有用.回答问题的ref部分;当您将变量传递给方法时,将创建该变量的副本。使用ref关键字将传递该变量的相同实例,以便该方法能够为调用方更新该变量 很多人似乎认为这只适用于值类型,因为引用类型只是作为引用传递的,所以ref关键字并没有任何效果。然而,这不是真的,
ref关键字在概念上传递对变量的引用作为参数,即被调用方可以修改变量(而不仅仅是修改值)。这对于基本类型(int、bool等)特别有用.回答问题的ref部分;当您将变量传递给方法时,将创建该变量的副本。使用ref关键字将传递该变量的相同实例,以便该方法能够为调用方更新该变量 很多人似乎认为这只适用于值类型,因为引用类型只是作为引用传递的,所以ref关键字并没有任何效果。然而,这不是真的,引用以和值相同的方式传递给方法;它被复制并创建该引用的新实例。这意味着调用方我将看到对对象本身的修改,但不会看到对引用的修改。因此,如果您试图将对象设置为null或新对象,则如果未使用ref关键字,调用方将看不到此修改: 无参考文献:
void UpdatePerson(Person person)
{
// Caller would see this change
person.Name = "Bob";
// Caller wouldn't see this change
person = null;
}
带有ref
void UpdatePerson(ref Person person)
{
// Caller would see this change
person.Name = "Bob";
// Caller would see this change
person = null;
}
name
属于std::string
类型,编译器生成的复制构造函数的行为与C#完全相同。这是一个不错的选择。谢谢。