3

参照型オブジェクトをメソッドに渡して、そこから変更しようとしています。それを変更すると、メソッドに渡される変数にその変更はありません。

次に例を示します。

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()変数の教師を実行した後も null ですか? 誰でも理由を説明できますか?メソッドに戻るか、 を使用できることはわかってIPersonいますが、それらを使用することはできません。CreateTeacher()out

IPersonインターフェイスは別の 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";
    }

1 番目の例と 2 番目の例の違いは何ですか? 渡された値がだったからnullですか?

助けてくれてありがとう!

4

2 に答える 2

7

C# は、参照ではなく値で渡します。あなたの場合、変更しようとしている参照を値で渡しています。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"};
}
于 2013-06-28T14:04:57.177 に答える