先说我的疑问吧 事情是这样的 我在一个函数中传一个对象作为参数 ,在函数里我为形参改变了引用 指向另外一个对象 但是出了函数 实参没有改变后来我一想参数的作用域在函数体内 除了函数体就被销毁了 你改了它的引用,有什么用?再来说下我的看法: 形参和实参 是两个变量 它们指向同一个地址 但是两个变量的地址不同 修改变量的引用是修改变量的值(地址) 就跟值传递一样改了 形参的值(地址) 不能改变实参的值 (地址)问题来了, 我突然想起了用ref试试 饿 还是先把代码贴出了先
首先来定义一个类Person:
public class Person
{
private string name;
public stringName
{
set{this.name = name;}
get{return this.name;}
}
public Person(string name)
{
this.name = name;
}
}
using System;
using System.Collections.Generic;
usingSystem.Linq;
using System.Text;
namespace ConsoleApplication1{
class Program
{
static void Main(string[] args)
{
Person p = new Person("zhangsan");
change(p);
//输出的是张三 并不是李四
Console.Writeline(p.Name);
change(p,"lisi");
//输出的是李四 意料中事 现在修改的是对象
Console.WriteLine(p.Name);
change(ref p);
//输出的是王五
Console.WriteLine(p.Name);
Console.ReadKey();
}
static void change(Person p){
//修改p的引用 指向新的对象
p = new Person("lisi");
}
static void change(Person p,string name){
//没什么好说的 引用传递 修改对象
p.Name = name;
}
static void change(ref Person p){
//同样是 让p指向另一个对象
p = new Person("wangwu");
}
}}
难到说 ref 把p变量的地址传进去 这样才可以该了形参的值(地址) 才能改实参的值(地址)那么岂不是说 在函数里 先 通过p的地址找到p变量 在根据变量的值(地址) 在找到对象 有人能给我解释下疑问吗?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示