Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Verilerin 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: TemperatureSensor ad alanında bir Sensors sı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ı Location olan bir _location özelliği (string). Konum ayarlanırken değer null veya boşsa bunun yerine "Unknown" depolansın.
    • Destek alanı Temperature olan bir _temperature özelliği (double). Sıcaklık ayarlanırken değeri -50 ile 150 arası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.
  • 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)"
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C# derleyicisi