во многих из статей, которые они дали, что ref
и out
работают одинаково. Даже во время компиляции распознает оба одинаково, но они отличаются во время выполнения (CLR). Кто-нибудь может объяснить как это отличается? а функционал ушел?
я попробовал то же самое в этом коде
public static void Main()
{
int par = 7;
Program x= new Program();
x.RefMethod(out par);
Console.WriteLine(par);
x.RefMethod1(ref par);
Console.WriteLine(par);
Console.ReadLine();
}
public void RefMethod(out int i)
{
i = 10;
}
public void RefMethod1(ref int i)
{
i = 20;
}
ILDASM для рефметода:
method public hidebysig instance void RefMethod([out] int32& i) cil managed
{
// Code size 6 (0x6)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldc.i4.s 10
IL_0004: stind.i4
IL_0005: ret
} // end of method Program::RefMethod
ILDASM для Refmethod1:
method public hidebysig instance void RefMethod1(int32& i) cil managed
{
// Code size 6 (0x6)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldc.i4.s 20
IL_0004: stind.i4
IL_0005: ret
} // end of method Program::RefMethod1
вышеизложенное ясно показывает, что оба они отличаются в одном месте, то есть при инициализации этого метода. Пожалуйста, кто-нибудь может мне помочь с моим вопросом?
Пожалуйста, ответьте на вопрос с ясностью. Я до сих пор не получил ответ: (