Lebih
Wawancara yang menarik hasil latihan: kembali, post increment dan ref perilaku
Berikut ini's sederhana kode aplikasi konsol, yang mengembalikan hasilnya saya tidak mengerti sepenuhnya.
Cobalah untuk berpikir apakah itu output 0, 1 atau 2 di konsol:
using System;
namespace ConsoleApplication
{
class Program
{
static void Main()
{
int i = 0;
i += Increment(ref i);
Console.WriteLine(i);
Console.ReadLine();
}
static private int Increment(ref int i)
{
return i++;
}
}
}
Jawabannya adalah 0.
Apa yang saya don't mengerti adalah mengapa pasca kenaikan i++
, dari Increment
metode, yang dilaksanakan pada ref
(tidak di copy berlalu variabel) apakah kenaikan variabel, tapi itu hanya akan diabaikan nanti.
Yang saya maksud adalah dalam video ini:
Adakah yang bisa menjelaskan ini contoh dan mengapa selama debug saya melihat bahwa nilai bertambah 1, tapi kemudian ia kembali ke 0?
59
3
i += Increment(ref i);
setara denganEkspresi pada sisi kanan dari tugas dievaluasi dari kiri ke kanan, jadi langkah berikutnya adalah
kembali aku++
mengembalikan nilai saat ini dariaku
(yang adalah 0), maka penambahanaku
Sebelum penetapan nilai
aku
adalah 1 (bertambah dalamIncrement
method), tetapi tugas membuatnya 0 lagi.saya pikir "sihir" hanya <menyerang>operasi didahulukan</strike> urutan operasi
adalah sama seperti
yang + operasi dijalankan kiri ke kanan
jadi pertama kita mengambil saya ... yang adalah 0 pada waktu itu ...
kemudian kita tambahkan hasil dari Kenaikan(ref saya) ... yang juga 0 ... 0+0=0 ... tapi tunggu dulu ... sebelum kita mendapatkan hasil yang saya benar-benar bertambah ...
bahwa kenaikan terjadi setelah operan kiri dari kami + operasi ben dievaluasi ... jadi itu tidak mengubah apa ... 0+0 masih 0 ... dengan demikian saya ditugaskan 0 setelah + operasi yang telah dilaksanakan
Seperti yang anda sebutkan - postincrement "i". pernyataan - "return i++;," akan menetapkan nilai 'i' di memori setelah nilai asli dikembalikan.
coba gunakan "return ++i;," dan mungkin anda akan mendapatkan itu.