İfade Gövdeli Üyeler
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 14 / 70.
Expression-bodied üyeler, yalnızca tek bir ifade içeren üyeler için kısa bir sözdizimi sağlar. Küme parantezleriyle dolu metot veya özellik gövdeleri yazmak yerine, => ok sözdizimini kullanırsınız.
Tek bir `expression` döndüren yöntemler için tüm gövdeyi değiştirebilirsiniz:
// Geleneksel metot
public int Add(int a, int b)
{
return a + b;
}
// İfade gövdeli metot
public int Add(int a, int b) => a + b;Bu sözdizimi, daha önce kısaca gördüğünüz salt okunur (read-only) özellikler için de çalışır:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}Property getter ve setter'ları için ayrı ayrı da expression body kullanabilirsiniz:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}Tek bir ifade içerdictiklerinde kurucular (constructors) bile bu sözdizimini kullanabilir:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}Expression-bodied üyeler, mantık basit olduğunda kodunuzu daha okunabilir hale getirir. Basit işlemler için bunları kullanın, ancak birden fazla ifadeye veya karmaşık bir mantığa ihtiyacınız olduğunda geleneksel gövdelere bağlı kalın.
Görev
KolayTemiz ve öz kod yazmak için ifade gövdeli üyelerin (expression-bodied members) gücünü sergileyen bir ürün fiyatlandırma hesaplayıcısı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Product.cs:Storead alanında (namespace) birProductsınıfı tanımlayın. Bu sınıf çeşitli ifade gövdeli üyeleri göstermelidir:- Otomatik uygulanan (auto-implemented) bir
Name(string) veBasePrice(decimal) özelliği (property) - Her iki özelliği de ayarlayan ifade gövdeli bir constructor
- Taban fiyatın %10'unu hesaplayan ifade gövdeli salt okunur (read-only) bir
TaxAmountözelliği - Taban fiyat artı vergi miktarını döndüren ifade gövdeli salt okunur bir
TotalPriceözelliği - İndirim miktarını (taban fiyat çarpı yüzde bölü 100) döndüren ifade gövdeli bir
GetDiscount(decimal percentage)metodu - Toplam fiyattan indirimin çıkarılmasıyla elde edilen değeri döndüren ifade gövdeli bir
GetFinalPrice(decimal discountPercentage)metodu
- Otomatik uygulanan (auto-implemented) bir
Program.cs: Ana dosyanızda, girdi değerlerini kullanarak birProductoluşturun ve ardından fiyatlandırma dökümünü görüntüleyin.
Üç girdi alacaksınız:
- Ürün adı
- Taban fiyat (base price)
- Uygulanacak indirim yüzdesi (discount percentage)
Fiyatlandırma ayrıntılarını şu biçimde yazdırın:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}Örneğin, girdiler Laptop, 1000 ve 15 ise, çıktı şu şekilde olmalıdır:
Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00Her parasal değeri tam olarak iki ondalık basamağa biçimlendirin — örneğin value.ToString("F2") veya $"{value:F2}". Bu kural taban fiyat, vergi, toplam, indirim ve nihai fiyat için aynı şekilde geçerlidir.
Tek bir ifade içeren tüm üyeler için => ok sözdizimini kullanmayı unutmayın. Bu, kodunuzun temiz ve okunabilir kalmasını sağlar!
Kendin dene
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// Girdi değerlerini kullanarak bir Product nesnesi oluştur
Product product = new Product(name, basePrice);
// GetDiscount metodunu kullanarak indirim tutarını hesapla
decimal discountAmount = product.GetDiscount(discountPercentage);
// GetFinalPrice metodunu kullanarak son fiyatı hesapla
decimal finalPrice = product.GetFinalPrice(discountPercentage);
// Fiyatlandırma detaylarını gerekli formatta yazdır:
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Base Price: {product.BasePrice:F2}");
Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
Console.WriteLine($"Final Price: {finalPrice:F2}");
}
}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ı