Sadece Okunur/Yazılır Özellikler
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 11 / 70.
Bazen sadece okunabilen veya sadece yazılabilen özelliklere ihtiyaç duyarsınız. Bunu, münferit erişimciler üzerinde private kullanarak kontrol edebilirsiniz.
Bir salt okunur özellik, bir public getter'a ancak bir private setter'a (veya hiç setter'a değil) sahiptir:
public class User
{
public string Username { get; private set; }
public User(string username)
{
Username = username;
}
}Harici kod Username değerini okuyabilir, ancak yalnızca sınıfın kendisi bunu değiştirebilir. Bu, oluşturma sırasında bir kez ayarlanması gereken değerler için yararlıdır.
Salt yazılır bir özellik, public bir setter'a ancak private bir getter'a sahiptir:
public class Account
{
public string Password { private get; set; }
public bool ValidatePassword(string input)
{
return input == Password;
}
}Salt yazılır özellikler nadirdir ancak saklanan değeri ifşa etmeden girişi kabul etmek istediğiniz parolalar gibi hassas veriler için yararlıdır.
Yalnızca bir getter ile gerçekten salt okunur özellikler de oluşturabilirsiniz:
public class Circle
{
public double Radius { get; }
public double Area => Math.PI * Radius * Radius;
public Circle(double radius)
{
Radius = radius;
}
}Yalnızca get; içeren özellikler yalnızca yapıcıda (constructor) veya bildirim sırasında atanabilir, bu da onları nesne oluşturulduktan sonra değişmez (immutable) kılar.
Görev
KolayHassas verileri korumak için salt okunur (read-only) ve salt yazılır (write-only) özelliklerin ne zaman kullanılacağını gösteren güvenli bir yapılandırma sistemi oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
Config.cs: Sunucu yapılandırmasını yönetenSettingsad alanı (namespace) içinde birServerConfigsınıfı tanımlayın. Şunlara sahip olmalıdır:- Salt okunur bir özellik
ServerName(yalnızca yapıcı metot (constructor) içinde ayarlanabilir) - Özel bir ayarlayıcıya (private setter) sahip salt okunur bir özellik
Port(yapıcı metot aracılığıyla ayarlanır) - Gizli bir anahtarı dahili olarak saklayan salt yazılır bir özellik
ApiKey - Sağlanan anahtarın saklanan anahtarla eşleşmesi durumunda
truedöndüren birValidateApiKey(string key)metodu - Sunucu adını ve portu kabul eden bir yapıcı metot (constructor)
- Salt okunur bir özellik
Program.cs: Ana dosyanızda, giriş değerlerini kullanarak birServerConfignesnesi oluşturun, API anahtarını ayarlayın ve ardından bir test anahtarına göre doğrulayın.
Dört giriş alacaksınız:
- Sunucu adı
- Port numarası
- Saklanacak API anahtarı
- Doğrulanacak API anahtarı
Sunucu ayrıntılarını ve doğrulama sonucunu şu formatta yazdırın:
Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}Örneğin, girişler MainServer, 8080, secret123 ve secret123 ise çıktı şöyle olmalıdır:
Server: MainServer, Port: 8080
API Key Valid: TrueKopya kağıdı
Bireysel erişimciler üzerinde private kullanarak özellik erişimini kontrol edebilirsiniz.
Özel bir ayarlayıcıya (setter) sahip salt okunur özellik:
public class User
{
public string Username { get; private set; }
public User(string username)
{
Username = username;
}
}Dış kod Username değerini okuyabilir, ancak yalnızca sınıfın kendisi onu değiştirebilir.
Özel bir alıcıya (getter) sahip salt yazılır özellik:
public class Account
{
public string Password { private get; set; }
public bool ValidatePassword(string input)
{
return input == Password;
}
}Saklanan değeri ifşa etmeden girdi kabul etmek istediğiniz hassas veriler için kullanışlıdır.
Yalnızca alıcıya (getter) sahip gerçekten salt okunur özellik:
public class Circle
{
public double Radius { get; }
public Circle(double radius)
{
Radius = radius;
}
}Yalnızca get; içeren özellikler, yalnızca yapıcıda (constructor) veya bildirim sırasında atanabilir; bu da onları nesne oluşturulduktan sonra değiştirilemez (immutable) kılar.
Kendin dene
using System;
using Settings;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
string serverName = Console.ReadLine();
int port = Convert.ToInt32(Console.ReadLine());
string apiKeyToStore = Console.ReadLine();
string apiKeyToValidate = Console.ReadLine();
// TODO: serverName ve port ile bir ServerConfig nesnesi oluşturun
// TODO: Salt-yazılır (write-only) özelliği kullanarak API anahtarını ayarlayın
// TODO: API anahtarını doğrulayın ve sonuçları yazdırın
// Format: Server: {ServerName}, Port: {Port}
// API Key Valid: {True/False}
}
}
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ı