Menu
Coddy logo textTech

Właściwości tylko do odczytu i zapisu

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 11 z 70.

Czasami potrzebujesz właściwości, które można tylko odczytywać lub tylko zapisywać. Możesz to kontrolować, używając private przy poszczególnych akcesorach.

Właściwość tylko do odczytu ma publiczny akcesor odczytu, ale prywatny akcesor zapisu (lub nie ma go wcale):

public class User
{
    public string Username { get; private set; }
    
    public User(string username)
    {
        Username = username;
    }
}

Zewnętrzny kod może odczytać Username, ale tylko sama klasa może go zmodyfikować. Jest to przydatne w przypadku wartości, które powinny być ustawiane raz podczas tworzenia obiektu.

Właściwość tylko do zapisu ma publiczny setter, ale prywatny getter:

public class Account
{
    public string Password { private get; set; }
    
    public bool ValidatePassword(string input)
    {
        return input == Password;
    }
}

Właściwości tylko do zapisu są rzadkie, ale przydatne w przypadku wrażliwych danych, takich jak hasła, gdy chcesz przyjmować dane wejściowe bez ujawniania przechowywanej wartości.

Możesz też utworzyć właściwości tylko do odczytu, zawierające wyłącznie getter:

public class Circle
{
    public double Radius { get; }
    public double Area => Math.PI * Radius * Radius;
    
    public Circle(double radius)
    {
        Radius = radius;
    }
}

Właściwości zawierające tylko get; można przypisać wyłącznie w konstruktorze lub podczas deklaracji, dzięki czemu po utworzeniu obiektu stają się niezmienne.

challenge icon

Wyzwanie

Łatwy

Zbudujmy bezpieczny system konfiguracji, który pokazuje, kiedy używać właściwości tylko do odczytu i tylko do zapisu, aby chronić poufne dane.

Utworzysz dwa pliki, aby uporządkować swój kod:

  • Config.cs: Zdefiniuj klasę ServerConfig w przestrzeni nazw Settings, która zarządza konfiguracją serwera. Powinna zawierać:
    • Właściwość tylko do odczytu ServerName (można ją ustawić tylko w konstruktorze)
    • Właściwość tylko do odczytu Port z prywatnym seterem (ustawianą za pomocą konstruktora)
    • Właściwość tylko do zapisu ApiKey, która przechowuje klucz tajny wewnętrznie
    • Metodę ValidateApiKey(string key), która zwraca true, jeśli podany klucz pasuje do zapisanego klucza
    • Konstruktor, który przyjmuje nazwę serwera i port
  • Program.cs: W głównym pliku utwórz obiekt ServerConfig na podstawie wartości wejściowych, ustaw klucz API, a następnie sprawdź go za pomocą klucza testowego.

Otrzymasz cztery dane wejściowe:

  • Nazwę serwera
  • Numer portu
  • Klucz API do zapisania
  • Klucz API do sprawdzenia

Wyświetl szczegóły serwera i wynik sprawdzenia w tym formacie:

Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}

Na przykład, jeśli danymi wejściowymi są MainServer, 8080, secret123 i secret123, wynik powinien wyglądać następująco:

Server: MainServer, Port: 8080
API Key Valid: True

Spróbuj swoich sił

using System;
using Settings;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj dane wejściowe
        string serverName = Console.ReadLine();
        int port = Convert.ToInt32(Console.ReadLine());
        string apiKeyToStore = Console.ReadLine();
        string apiKeyToValidate = Console.ReadLine();

        // TODO: Utwórz obiekt ServerConfig z serverName i port

        // TODO: Ustaw klucz API za pomocą właściwości tylko do zapisu

        // TODO: Sprawdź poprawność klucza API i wyświetl wyniki
        // Format: Serwer: {ServerName}, Port: {Port}
        //         API Key Valid: {True/False}
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online