如果您在 .NET 中创建一个类,它将是一个引用类型。在本例中,我在 SomeMethod 中设置 MyClass 的名称。现在在 Main 方法中,我真的不需要从 SomeMethod 分配返回值,因为传入的参数是引用类型。我希望 main 方法中的实例具有新的更新名称“John”,并且确实如此。
为了便于阅读,我经常将返回值分配回,即使在 main 中不需要将更新的属性重新分配给我的原始实例。我的假设是编译器足够聪明,不会在 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