Menu
CoddyTech

Field Pendukung

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 17 dari 70.

Property yang diimplementasikan secara otomatis memang praktis, tetapi terkadang kamu memerlukan kontrol lebih besar atas cara property menyimpan atau mengambil nilainya. Di sinilah backing field berperan. Backing field adalah field privat yang menyimpan data aktual untuk sebuah property.

public class Product
{
    private decimal _price;  // Field penyimpanan
    
    public decimal Price
    {
        get { return _price; }
        set { _price = value; }
    }
}

Ini terlihat seperti pekerjaan tambahan dibandingkan dengan auto-properties, tetapi backing fields memungkinkan kamu menambahkan logika. Contohnya, kamu dapat memvalidasi data sebelum menyimpannya:

public class Product
{
    private decimal _price;
    
    public decimal Price
    {
        get => _price;
        set => _price = value < 0 ? 0 : value;
    }
}

Sekarang, harga negatif otomatis menjadi nol. Kamu juga bisa mengubah data saat membaca atau menulis, mencatat perubahan, atau memicu tindakan lain.

Konvensi penamaan backing field biasanya menggunakan awalan garis bawah (_price) atau huruf kecil (price) untuk membedakannya dari property.

Saat kamu menggunakan property yang diimplementasikan secara otomatis seperti public decimal Price { get; set; }, compiler sebenarnya membuat backing field tersembunyi untukmu. Backing field eksplisit memberimu penyimpanan yang sama dengan kendali penuh atas perilakunya.

challenge icon

Tantangan

Mudah

Mari kita bangun sistem sensor suhu yang menggunakan field pendukung untuk memvalidasi dan mengubah data saat disimpan dan diambil.

Kamu akan membuat dua file untuk mengatur kodemu:

  • TemperatureSensor.cs: Definisikan class TemperatureSensor di namespace Sensors. Sensor ini mengukur suhu dalam Celsius, tetapi kita perlu memastikan hasil pembacaannya tetap dalam batas yang valid. Gunakan field pendukung untuk menerapkan hal berikut:
    • Property Location (string) dengan field pendukung _location. Saat mengatur lokasi, jika nilainya null atau kosong, simpan "Unknown" sebagai gantinya.
    • Property Temperature (double) dengan field pendukung _temperature. Saat mengatur suhu, batasi nilainya antara -50 dan 150 (jika kurang dari -50, simpan -50; jika lebih dari 150, simpan 150).
    • Property hanya-baca TemperatureFahrenheit yang menghitung dan mengembalikan suhu dalam Fahrenheit menggunakan rumus: (celsius * 9 / 5) + 32. Property ini harus menggunakan field pendukung secara langsung.
    • Constructor yang menerima nilai lokasi dan suhu awal.
  • Program.cs: Di file utama, buat sensor menggunakan nilai input dan tampilkan hasil pembacaannya. Lalu perbarui suhu dengan nilai input kedua dan tampilkan hasil pembacaan yang telah diperbarui.

Kamu akan menerima tiga input:

  • Lokasi sensor
  • Hasil pembacaan suhu awal
  • Hasil pembacaan suhu yang telah diperbarui

Cetak output dengan format berikut:

Sensor: {Location}
Temperature: {Temperature}C ({TemperatureFahrenheit}F)
Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)

Misalnya, jika inputnya adalah Lab Room, 25, dan 200, outputnya akan seperti berikut:

Sensor: Lab Room
Temperature: 25C (77F)
Updated Temperature: 150C (302F)

Perhatikan bahwa hasil pembacaan kedua, 200, dibatasi menjadi 150 karena nilainya melebihi suhu maksimum yang valid. Field pendukung memberimu kendali atas cara data disimpan!

Coba sendiri

using System;
using Sensors;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        string location = Console.ReadLine();
        double initialTemp = Convert.ToDouble(Console.ReadLine());
        double updatedTemp = Convert.ToDouble(Console.ReadLine());

        // TODO: Buat TemperatureSensor dengan lokasi dan suhu awal

        // TODO: Tampilkan lokasi sensor dan pembacaan suhu awal
        // Format: "Sensor: {Location}"
        // Format: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"

        // TODO: Perbarui suhu sensor dengan nilai terbaru

        // TODO: Tampilkan pembacaan suhu terbaru
        // Format: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online