Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Hassas 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öneten Settings ad alanı (namespace) içinde bir ServerConfig sı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 true döndüren bir ValidateApiKey(string key) metodu
    • Sunucu adını ve portu kabul eden bir yapıcı metot (constructor)
  • Program.cs: Ana dosyanızda, giriş değerlerini kullanarak bir ServerConfig nesnesi 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: True

Kopya 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}
    }
}
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