Latihan - Menemukan jenis referensi

Selesai

Jenis referensi mencakup array, kelas, dan string. Jenis referensi diperlakukan secara berbeda dari jenis nilai mengenai cara nilai disimpan saat aplikasi dijalankan.

Dalam latihan ini, Anda mempelajari bagaimana jenis referensi berbeda dari jenis nilai, dan cara menggunakan new operator untuk mengaitkan variabel dengan nilai dalam memori komputer.

Bagaimana jenis referensi berbeda dari jenis nilai

Variabel jenis nilai menyimpan nilainya langsung di area penyimpanan yang disebut tumpukan. Tumpukan adalah memori yang dialokasikan untuk kode yang saat ini berjalan pada CPU (juga dikenal sebagai bingkai tumpukan, atau bingkai aktivasi). Ketika bingkai tumpukan selesai dieksekusi, nilai dalam tumpukan akan dihapus.

Variabel jenis referensi menyimpan nilainya di wilayah memori terpisah yang disebut timbunan. Timbunan adalah area memori yang dibagikan di banyak aplikasi yang berjalan pada sistem operasi secara bersamaan. Runtime .NET berkomunikasi dengan sistem operasi untuk menentukan alamat memori apa yang tersedia, dan meminta alamat tempatnya dapat menyimpan nilai. Runtime .NET menyimpan nilai, lalu mengembalikan alamat memori ke variabel . Saat kode Anda menggunakan variabel , .NET Runtime mencari alamat yang disimpan dalam variabel dengan lancar, dan mengambil nilai yang disimpan di sana.

Anda selanjutnya akan menulis beberapa kode yang menggambarkan ide-ide ini dengan lebih jelas.

Menentukan variabel jenis referensi

  1. Hapus atau gunakan operator // komentar baris untuk mengomentari semua kode dari latihan sebelumnya.

  2. Perbarui kode Anda di Editor Visual Studio Code sebagai berikut:

    int[] data;
    

    Kode sebelumnya mendefinisikan variabel yang dapat menyimpan nilai array jenis int .

    Pada titik ini, data hanyalah variabel yang dapat menyimpan referensi, atau lebih tepatnya, alamat memori dari nilai dalam heap. Karena tidak menunjuk ke alamat memori, itu disebut referensi null.

  3. Membuat instans int array menggunakan new kata kunci

    Perbarui kode Anda di Editor Visual Studio Code untuk membuat dan menetapkan instans int array baru, menggunakan kode berikut:

    int[] data;
    data = new int[3];
    

    Kata new kunci menginformasikan .NET Runtime untuk membuat instans int array, lalu berkoordinasi dengan sistem operasi untuk menyimpan array berukuran tiga nilai int dalam memori. Runtime .NET mematuhi, dan mengembalikan alamat memori array int yang baru. Terakhir, alamat memori disimpan dalam data variabel. Elemen array int default ke nilai 0, karena itu adalah nilai default int.

  4. Ubah contoh kode untuk melakukan kedua operasi dalam satu baris kode

    Dua baris kode pada langkah sebelumnya biasanya disingkat menjadi satu baris kode untuk mendeklarasikan variabel, dan membuat instans baru array int . Ubah kode dari langkah 3 menjadi berikut.

    int[] data = new int[3];
    
    

    Meskipun tidak ada output untuk diamati, semoga latihan ini menambahkan kejelasan tentang bagaimana sintaks C# berkaitan dengan langkah-langkah proses untuk bekerja dengan jenis referensi.

Apa yang berbeda dengan jenis data string C#?

Tipe data string juga merupakan jenis referensi. Anda mungkin bertanya-tanya mengapa new operator tidak digunakan saat mendeklarasikan string. Ini murni kenyamanan yang diberikan oleh desainer C#. string Karena tipe data sering digunakan, Anda dapat menggunakan format ini:

string shortenedString = "Hello World!";
Console.WriteLine(shortenedString);

Namun, di balik layar, instans baru System.String dibuat dan diinisialisasi ke "Halo Dunia!".

Rekap

  • Jenis nilai dapat menyimpan nilai yang lebih kecil dan disimpan dalam tumpukan. Jenis referensi dapat menyimpan nilai besar, dan instans baru dari jenis referensi dibuat menggunakan operator new. Variabel jenis referensi menyimpan referensi (alamat memori) ke nilai aktual yang disimpan dalam heap.
  • Jenis referensi termasuk array, string, dan kelas.

Uji pengetahuan Anda

1.

Di C#, ketika new kata kunci digunakan untuk membuat instans class, di mana memori dialokasikan?