建设农家书屋官方网站,桐庐做网站,建网站公司浩森宇特,阿里巴巴做网站营销有没有用1.在 C# 中#xff0c;参数传递方式有三种#xff1a;值传递和引用传递
a. 值传递#xff08;Pass by Value#xff09; 概念 将参数的副本传递给方法。 方法内对参数的修改不影响原始值。 适用场景 基本数据类型#xff08;如int、float、bool#xff09;。 不可变类型…1.在 C# 中参数传递方式有三种值传递和引用传递
a. 值传递Pass by Value 概念 将参数的副本传递给方法。 方法内对参数的修改不影响原始值。 适用场景 基本数据类型如int、float、bool。 不可变类型如string。 小型结构体如DateTime、Point。
void ChangeValue(int num) {num 100; // 修改副本不影响原始值
}int original 50;
ChangeValue(original);
Console.WriteLine(original); // 输出: 50b. 引用传递Pass by Reference 概念 使用ref关键字将参数的内存地址传递给方法。 方法内对参数的修改直接影响原始值。 适用场景 需要在方法内修改调用者的变量。 避免大型对象的复制开销。
void Swap(ref int a, ref int b) {int temp a;a b;b temp; // 直接修改原始变量
}int x 10, y 20;
Swap(ref x, ref y);
Console.WriteLine($x{x}, y{y}); // 输出: x20, y10类传递是 引用类型的传递 引用类型如class、interface、delegate默认按引用传递值。 方法内可修改对象的属性但无法修改引用本身除非用ref。
class Person {public string Name { get; set; }
}void ChangeName(Person p) {p.Name Alice; // 修改对象属性影响原始对象
}void ChangeReference(Person p) {p new Person { Name Bob }; // 修改引用本身不影响原始引用
}Person person new Person { Name Charlie };
ChangeName(person);
Console.WriteLine(person.Name); // 输出: AliceChangeReference(person);
Console.WriteLine(person.Name); // 输出: Alice引用未变重点关注
void ChangeReference(Person p) {p new Person { Name Bob }; // 修改引用本身不影响原始引用
}这里明显可以看到c#的引用创建的副本 c引用是别名 C# 引用类型的参数传递机制 在 C# 中引用类型默认按值传递引用这意味着 当你传递一个引用类型如 Person 对象时传递的是引用的副本即内存地址的复制。 方法内部有两个独立的引用变量原始引用和副本。 修改副本引用如 p new Person()只会影响副本不会改变原始引用
c# 引用类型的内存模型 在 C# 中引用类型的对象存储在堆Heap上而引用变量如 Person person存储在栈Stack或堆上取决于变量的作用域。 关键区别 引用变量存储对象的内存地址通常是 4 字节或 8 字节取决于系统是 32 位还是 64 位。 对象本身存储在堆上可能占用大量内存如大型数组、复杂对象图。
C引用的特性 无副本引用不占用额外内存只是原始对象的别名。 必须初始化引用必须在创建时绑定到对象且不能重新绑定。