gpt4 book ai didi

c# - 传递引用类型对象并更改值

转载 作者:行者123 更新时间:2023-11-30 13:26:48 25 4
gpt4 key购买 nike

我正在尝试将引用类型对象传递给方法并从那里更改它。当我更改它时,我没有对传递给方法的变量进行更改。

例子如下:

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() 变量 teacher 后仍然为空?谁能解释为什么?我知道我可以在我的 CreateTeacher() 方法上返回 IPerson 或使用 out,但我不能使用它们。

IPerson 接口(interface)在不同的 dll 中,Teacher 类在不同的 dll 中。 CreateTeacher 方法是类所在的同一个 dll。

更新:

这是我尝试过的其他方法:

  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吗?

感谢您的帮助!

最佳答案

C# 通过值而不是引用传递。在您的情况下,您正在按值(value)传递您试图更改的引用。你想明确地说你想使用 ref 关键字通过引用传递你的引用:

public void CreateTeacher(ref IPerson teacher)
{
teacher = new Teacher() { Name = "Teacher name", LastName = "Teacher's last name"};
}

或者更好的是:

public Teacher CreateTeacher()
{
return new Teacher() { Name = "Teacher name", LastName = "Teacher's last name"};
}

关于c# - 传递引用类型对象并更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com