c# – 传递引用类型对象并更改值
发布时间:2020-12-16 00:08:21 所属栏目:百科 来源:网络整理
导读:我试图将引用类型对象传递给方法并从那里更改它.当我更改它时,我没有对传递给方法的变量进行更改. 这是一个例子: public interface IPerson{ string Name { get; }}public class Teacher : IPerson{ public string Name { get; set; } public string LastNa
我试图将引用类型对象传递给方法并从那里更改它.当我更改它时,我没有对传递给方法的变量进行更改.
这是一个例子: public interface IPerson { string Name { get; } } public class Teacher : IPerson { public string Name { get; set; } public string LastName { get; set; } } //...... public void CreateTeacher(IPerson teacher) { teacher = new Teacher() { Name = "Teacher name",LastName = "Teacher's last name"}; } //..... //I am trying this,but after I call CreateTeacher() variable teacher is null IPerson teacher=null; CreateTeacher(teacher); string n = teacher.Name; 运行CreateTeacher()后,变量老师仍为空?有谁能解释为什么? IPerson界面位于不同的dll中,而Teacher类位于不同的dll中. CreateTeacher方法与class相同. 更新: 这是我尝试的其他东西: IPerson teacher=new Teacher(); CreateTeacher(teacher); string n = teacher.Name;//I have the changes here now //...... public void CreateTeacher(IPerson teacher) { ((Teacher)teacher).Name = "My Name"; } 第一个例子和第二个例子有什么区别?是因为传递的值是null吗? 谢谢您的帮助! 解决方法
除了RedPolygon的答案之外……我觉得这可能会让事情变得清晰起来.
如上所述,您正在更改引用的值..而不是引用指向的对象. 将您的代码更改为: public interface IPerson { string Name { get; set; } } public void CreateTeacher(IPerson teacher) { teacher.Name = "Teacher name"; } IPerson teacher = new Teacher(); CreateTeacher(teacher); ..那可行.为什么?有几个原因. >它不再是空的,我们“新起来”. 这是令人困惑的……是的,但是当你玩这样的例子时你就明白了. 编辑: 我不得不点燃油漆并展示我非常棒的MSPaint技能: 这是您的第一个代码段: 这是我的片段(和你的第二个): (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容