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.
Tantangan
MudahMari 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 classTemperatureSensordi namespaceSensors. 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-50dan150(jika kurang dari -50, simpan -50; jika lebih dari 150, simpan 150). - Property hanya-baca
TemperatureFahrenheityang 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.
- Property
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)"
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online