Destekleyici Alanlar (Backing Fields)
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 17 / 70.
Otomatik uygulanan özellikler kullanışlıdır, ancak bazen bir özelliğin değerini nasıl depoladığı veya aldığı üzerinde daha fazla denetime ihtiyaç duyarsınız. Destekleyen alanlar bu noktada devreye girer. Destekleyen alan, bir özelliğin gerçek verilerini depolayan özel bir alandır.
public class Product
{
private decimal _price; // Destekleyici alan
public decimal Price
{
get { return _price; }
set { _price = value; }
}
}Bu, otomatik özelliklerle karşılaştırıldığında fazladan iş gibi görünebilir, ancak destek alanları mantık eklemenize olanak tanır. Örneğin, verileri depolamadan önce doğrulayabilirsiniz:
public class Product
{
private decimal _price;
public decimal Price
{
get => _price;
set => _price = value < 0 ? 0 : value;
}
}Artık negatif fiyatlar otomatik olarak sıfır olur. Ayrıca okuma veya yazma sırasında verileri dönüştürebilir, değişiklikleri günlüğe kaydedebilir veya diğer eylemleri tetikleyebilirsiniz.
Destek alanı adlandırma kuralı, onu özellikten ayırt etmek için genellikle alt çizgi öneki (_price) veya küçük harf (price) kullanır.
public decimal Price { get; set; } gibi otomatik uygulanan özellikleri kullandığınızda, derleyici aslında sizin için gizli bir arka alan oluşturur. Açıkça tanımlanan arka alanlar, davranış üzerinde tam denetim sağlayarak size aynı depolama alanını sunar.
Görev
KolayVerilerin depolanıp alınırken doğrulanması ve dönüştürülmesi için destek alanlarını kullanan bir sıcaklık sensörü sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
TemperatureSensor.cs:TemperatureSensorad alanında birSensorssınıfı tanımlayın. Bu sensör sıcaklığı Celsius cinsinden ölçer, ancak ölçümlerin geçerli sınırlar içinde kalmasını sağlamamız gerekir. Aşağıdakileri uygulamak için destek alanlarını kullanın:- Destek alanı
Locationolan bir_locationözelliği (string). Konum ayarlanırken değer null veya boşsa bunun yerine"Unknown"depolansın. - Destek alanı
Temperatureolan bir_temperatureözelliği (double). Sıcaklık ayarlanırken değeri-50ile150arasında sınırlandırın (değer -50'nin altındaysa -50, 150'nin üzerindeyse 150 depolansın). - Sıcaklığı Fahrenheit cinsinden hesaplayıp döndüren salt okunur bir
TemperatureFahrenheitözelliği. Bunun için şu formülü kullanın:(celsius * 9 / 5) + 32. Bu özellik doğrudan destek alanını kullanmalıdır. - Konum ve başlangıç sıcaklığı değerlerini kabul eden bir kurucu.
- Destek alanı
Program.cs: Ana dosyanızda, giriş değerlerini kullanarak bir sensör oluşturun ve ölçümlerini görüntüleyin. Ardından sıcaklığı ikinci bir giriş değeriyle güncelleyin ve güncellenmiş ölçümleri gösterin.
Üç giriş alacaksınız:
- Sensör konumu
- Başlangıç sıcaklığı ölçümü
- Güncellenmiş sıcaklık ölçümü
Çıktıyı şu biçimde yazdırın:
Sensor: {Location}
Temperature: {Temperature}C ({TemperatureFahrenheit}F)
Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)Örneğin girişler Lab Room, 25 ve 200 ise çıktı şu şekilde olmalıdır:
Sensor: Lab Room
Temperature: 25C (77F)
Updated Temperature: 150C (302F)İkinci 200 ölçümünün, izin verilen maksimum sıcaklığı aştığı için 150 değerine sınırlandırıldığına dikkat edin. Destek alanlarınız, verilerin nasıl depolanacağı üzerinde size bu denetimi sağlar!
Kendin dene
using System;
using Sensors;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string location = Console.ReadLine();
double initialTemp = Convert.ToDouble(Console.ReadLine());
double updatedTemp = Convert.ToDouble(Console.ReadLine());
// TODO: Konum ve başlangıç sıcaklığı ile bir TemperatureSensor oluşturun
// TODO: Sensör konumunu ve başlangıç sıcaklık değerlerini yazdırın
// Format: "Sensor: {Location}"
// Format: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
// TODO: Sensörün sıcaklığını güncellenmiş değerle güncelleyin
// TODO: Güncellenmiş sıcaklık değerlerini yazdırın
// Format: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci KayıtlarıKendi başına pratik yap: Online C# derleyicisi