.NETでクラスを作成すると、それは参照型になります。この例では、SomeMethod内でMyClassの名前を設定しています。Mainメソッド内では、渡されるパラメーターが参照型であるため、SomeMethodからの戻り値を実際に割り当てる必要はありません。mainメソッドのインスタンスに、新しく更新された名前「John」を付けたいのですが、そうです。
更新されたプロパティをメインのオリジンインスタンスに再割り当てするためにこれが必要ではない場合でも、読みやすくするために、とにかく戻り値を割り当て先に戻すことがよくあります。私の仮定では、コンパイラはMainメソッド内にMyClassの新しい参照を再作成しないほど賢いです。本当?または、コンパイラは実際に新しい参照を作成し、戻り値を割り当てるときに更新された値を指しますか?
//My class will be a reference type
public class MyClass
{
public int ID { get; set; }
public string name { get; set; }
}
public class Main
{
//Main method of application
public void Main()
{
MyClass myClass = new MyClass();
//return value back to itself
myClass = SomeMethod(myClass);
}
public MyClass SomeMethod(MyClass myClass)
{
myClass.name = "John";
return myClass;
}
}
これがILです
instance void Main1 () cil managed
{
// Method begins at RVA 0x207c
// Code size 15 (0xf)
.maxstack 2
.locals init (
[0] class Test.MyClass myClass
)
IL_0000: newobj instance void Test.MyClass::.ctor()
IL_0005: stloc.0
IL_0006: ldarg.0
IL_0007: ldloc.0
IL_0008: call instance class Test.MyClass Test.Main::SomeMethod(class Test.MyClass)
IL_000d: stloc.0
IL_000e: ret
} // end of method Main::Main1