Przejdź do treści stopki
POMOC .NET

C# Getter Setter (jak to działa dla programistów)

Gettery i settery są kluczowymi pojęciami w językach programowania obiektowego, takich jak C#. Te dwie metody pozwalają nam kontrolować dostęp i modyfikację właściwości klasy. W tym poradniku zbadamy zarówno podstawowe, jak i średniozaawansowane aspekty getterów C# i prywatnych setterów, używając bloków kodu.

Wprowadzenie do Getterów i Setterów

Czym są Gettery i Settery?

W istocie gettery i settery to nic innego jak metody umożliwiające dostęp do prywatnych zmiennych w klasie. Getter zwraca wartość prywatnego pola zmiennej, podczas gdy setter ją modyfikuje. Te metody zapewniają, że wewnętrzne dane klasy (pola) są dostępowane lub modyfikowane w bezpieczny i poprawny sposób.

Dlaczego ich potrzebujemy?

Wyobraz sobie, ze masz public class Car z wlasciwoscia private string description. Jeżeli ktoś z zewnątrz tej klasy chce znać opis, nie może bezpośrednio go uzyskać, ponieważ jest prywatny. Tutaj wchodzą w grę gettery i settery.

Akcesor pozwolilby uzytkownikom na pobranie wartosci private string description bez dawania im bezposredniego dostepu do jej modyfikacji. Z drugiej strony, setter dałby użytkownikom możliwość zmiany opisu pod warunkami, które ustalamy.

Modyfikatory dostępu

Modyfikatory dostępu definiują poziom widoczności i dostępności pola lub właściwości z zewnątrz klasy. Najczesciej uzywane modyfikatory to public i private.

  • Public: Pola lub wlasciwosci zadeklarowane jako public moga byc dostepne z dowolnego miejsca w Twoim programie. Na przyklad mozesz miec wlasciwosc public int Age, która moze byc dostepna i modyfikowana przez dowolna czesc Twojego kodu.
  • Private: Wlasciwosci lub pola zadeklarowane jako private moga byc dostepne tylko w ramach zdefiniowanej klasy, na przyklad private int age. Ta enkapsulacja pomaga zapobiegać nieautoryzowanym modyfikacjom i zapewnia, że wewnętrzny stan klasy jest prawidłowo zachowywany.

Prosty Getter i Setter

Zacznijmy od prostego przykładu.

using System;

public class Person
{
    private string name;  // This is a private string name property variable

    // This is the getter
    public string GetName()
    {
        return name;
    }

    // This is the setter
    public void SetName(string newName)
    {
        name = newName;
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.SetName("John");
        Console.WriteLine(person.GetName());
    }
}
using System;

public class Person
{
    private string name;  // This is a private string name property variable

    // This is the getter
    public string GetName()
    {
        return name;
    }

    // This is the setter
    public void SetName(string newName)
    {
        name = newName;
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.SetName("John");
        Console.WriteLine(person.GetName());
    }
}
Imports System

Public Class Person
	Private name As String ' This is a private string name property variable

	' This is the getter
	Public Function GetName() As String
		Return name
	End Function

	' This is the setter
	Public Sub SetName(ByVal newName As String)
		name = newName
	End Sub
End Class

Friend Class Program
	Shared Sub Main()
		Dim person As New Person()
		person.SetName("John")
		Console.WriteLine(person.GetName())
	End Sub
End Class
$vbLabelText   $csharpLabel

W powyzszym class Person mamy zarówno akcesor GetName, jak i modyfikator SetName dla wlasciwosci name. Podczas uruchamiania metody static void Main, wydrukuje "John", poniewaz ustawilismy ta wartosc dla imienia uzywajac modyfikatora.

Właściwości automatycznie wdrożone

Teraz możesz pomyśleć: 'Czy zawsze muszę pisać oddzielne metody dla getterów i setterów?' Odpowiedź brzmi: 'nie'. C# wprowadził pojęcie zwane 'właściwościami automatycznie wdrożonymi', aby to uprościć.

W C# mozna uzywac automatycznych wlasciwosci, co daje skrocona forme deklaracji private field i jej wlasciwosci. Oto przykład:

using System;

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property
    public string Title { get; set; } // Another auto-implemented property
}

class Program
{
    static void Main()
    {
        Student student = new Student();
        student.Name = "Alice";  // Using setter
        Console.WriteLine(student.Name);  // Using getter
    }
}
using System;

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property
    public string Title { get; set; } // Another auto-implemented property
}

class Program
{
    static void Main()
    {
        Student student = new Student();
        student.Name = "Alice";  // Using setter
        Console.WriteLine(student.Name);  // Using getter
    }
}
Imports System

Public Class Student
	Public Property Name() As String ' -  This is an auto-implemented or automatic property
	Public Property Title() As String ' -  Another auto-implemented property
End Class

Friend Class Program
	Shared Sub Main()
		Dim student As New Student()
		student.Name = "Alice" ' Using setter
		Console.WriteLine(student.Name) ' Using getter
	End Sub
End Class
$vbLabelText   $csharpLabel

W klasie Student wlasciwosc Name posiada zarówno akcesor, jak i modyfikator, które sa automatycznie implementowane. Kompilator C# tworzy pole private string name w tle, a wlasciwosc Name zapewnia dostep do tego pola.

Zaawansowane modyfikatory dostępu we właściwościach

Właściwości tylko do odczytu

Czasami możesz chcieć zapewnić właściwość, która może być odczytywana, ale nie modyfikowana z zewnątrz. Tutaj przydatne są właściwości tylko do odczytu. Możesz pominąć setter we właściwości, aby uczynić ją tylko do odczytu.

Powiedzmy, ze chcemy dodac do naszej klasy Person wlasciwosc string Description tylko do odczytu:

public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
Public Class Person
	Public Property Name() As String
	Public ReadOnly Property Description() As String

	Public Sub New(ByVal name As String, ByVal description As String)
		Me.Name = name
		Me.Description = description
	End Sub
End Class
$vbLabelText   $csharpLabel

W tym przykladzie wlasciwosc Description moze byc ustawiona tylko w konstruktorze klasy Person. Po ustawieniu nie może być modyfikowana z zewnątrz.

Prywatne Settery

Czasami możesz chcieć pozwolić na odczytanie właściwości z zewnątrz klasy, ale modyfikowanie tylko z wnętrza klasy. To jest osiagniete za pomoca private set.

using System;

public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
using System;

public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
Imports System

Public Class Program
	Private privateDescription As String
	Public Property Description() As String
		Get
			Return privateDescription
		End Get
		Private Set(ByVal value As String)
			privateDescription = value
		End Set
	End Property

	Public Sub New()
		Description = "This is a program about getters and setters."
	End Sub
End Class

Friend Class ProgramTest
	Shared Sub Main()
		Dim myProgram As New Program()
		Console.WriteLine(myProgram.Description) ' Allowed
		' myProgram.Description = "New Description";  // Not allowed
	End Sub
End Class
$vbLabelText   $csharpLabel

W class Program wlasciwosc Description posiada private set, co oznacza, ze nie moze byc zmieniona z zewnatrz klasy, co zapewnia integralnosc danych.

Dziedziczenie i przesłanianie

Pracując z klasami pochodnymi, możesz przesłaniać metody gettera i settera, aby dostosować ich działanie. Pozwala to na dodanie dodatkowej logiki podczas pobierania lub ustawiania wartości.

public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
Public Class Person
	Public Overridable Property Name() As String
End Class

Public Class Student
	Inherits Person

	Private studentID As String

	Public Overrides Property Name() As String
		Get
			Return MyBase.Name
		End Get
		Set(ByVal value As String)
			If Not String.IsNullOrEmpty(value) Then
				MyBase.Name = value
			End If
		End Set
	End Property
End Class
$vbLabelText   $csharpLabel

W tym przykladzie klasa Student dziedziczy po Person i nadpisuje modyfikator wlasciwosci Name. Dodaje ona sprawdzenie walidacyjne przed ustawieniem nazwy, zapewniając, że nie jest pusta lub null.

Wprowadzenie Iron Suite w celu usprawnienia rozwoju C

Iron Suite to zbiór narzędzi badawczych, które znacznie zwiększają możliwości programowania w C#. Zawiera IronPDF, IronXL, IronOCR i IronBarcode. Każde z tych narzędzi służy unikalnemu celowi i może być zintegrowane z różnymi aspektami C#.

IronPDF - Potężne narzędzie do zarządzania PDF

Dowiedz się więcej o IronPDF, bibliotece, która pozwala programistom tworzyć, odczytywać i edytować dokumenty PDF w C#. Niezależnie od tego, czy jest to konwersja HTML do PDF, czy zarządzanie metadanymi PDF za pomocą getterów i setterów, IronPDF pokrywa twoje potrzeby.

IronPDF wyróżnia się w konwersji HTML do PDF, zapewniając precyzyjne zachowanie oryginalnych układów i stylów. Idealnie nadaje się do tworzenia plików PDF z treści internetowych, takich jak raporty, faktury i dokumentacja. Dzięki obsłudze plików HTML, adresów URL i surowych ciągów znaków HTML, IronPDF z łatwością tworzy wysokiej jakości dokumenty PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronXL - Prosta manipulacja Excel

Pracując z plikami Excel, IronXL Excel Library upraszcza proces odczytu i zapisu. To narzędzie może być używane do manipulacji prywatnymi i publicznymi łańcuchami lub liczbami całkowitymi w plikach Excel, podobnie jak obsługujesz dane wewnątrz klasy używając tej samej składni dla getterów i setterów w C#.

IronOCR - Optical Character Recognition in C

Przeglądaj IronOCR, bibliotekę rozpoznawania tekstu, która tłumaczy obrazy na przeszukiwalny tekst. Jeśli twoja aplikacja obejmuje odczytywanie tekstu ze skanowanych dokumentów, potężne możliwości IronOCR mogą być łatwo zintegrowane. Może obsługiwać prywatne pola i publiczne opisy łańcuchów, tak jak można by oczekiwać w klasie Person lub klasie Student z poprzedniego przykładu.

IronBarcode - Biblioteka do odczytu i zapisu kodów kreskowych

Odkryj funkcje IronBarcode dla aplikacji wymagających odczytu i zapisu kodów kreskowych. Pozwala zarówno na bezpośredni dostęp do danych kodu kreskowego, jak i na dostosowanie za pomocą automatycznych właściwości, podobnie jak gettery i settery używane w programowaniu C#.

Iron Suite i Gettery i Settery

Pakiet Iron Suite płynnie integruje się z programowaniem w C#, w tym z getterami i setterami. Te narzędzia dodają wartość do każdego projektu C#.

Wnioski

Podsumowując:

  1. Getter and Setter: Pomagaja w dostepie i modyfikacji prywatnych pol klasy.
  2. Auto Properties: Elegancki sposob na automatyczne akcesory i modyfikatory dzieki automatycznie implementowanym wlasciwosciom.
  3. Access Modifiers: Pomagaja w dostrojeniu dostepnosci wlasciwosci.

Do tej pory powinieneś mieć solidne zrozumienie, jak używać getterów i setterów w C#.

Pakiet narzędzi Iron Suite oferuje niesamowitą funkcjonalność dla programistów C#. Każdy z tych produktów, w tym IronPDF, IronXL, IronOCR i IronBarcode, posiada bezpłatną wersję próbną narzędzi Iron Software, pozwalając ci na eksplorację i integrację tych potężnych bibliotek w swoich projektach bez początkowego inwestowania.

Kiedy jestes gotowy do zatwierdzenia, indywidualne licencje zaczynaja sie od $999. Jeśli okaże się, że więcej niż jedno z tych narzędzi pasuje do twoich potrzeb, możesz skorzystać z okazji, aby kupić pełny pakiet Iron Suite w cenie zaledwie dwóch indywidualnych licencji.

Często Zadawane Pytania

Jaki jest cel getterów i setterów w C#?

Gettery i settery w C# służą do kontrolowania dostępu do prywatnych właściwości klasy. Gettery pobierają wartość właściwości, podczas gdy settery pozwalają na jej modyfikację. Ta enkapsulacja zapewnia bezpieczny i kontrolowany dostęp do danych klasy.

Jak modyfikatory dostępu wpływają na widoczność właściwości w C#?

Modyfikatory dostępu, takie jak public i private, determinują widoczność i dostępność właściwości klasy w C#. Właściwości public są dostępne z każdego miejsca, natomiast właściwości private są ograniczone do klasy, w której zostały zadeklarowane.

Czym są właściwości samowykonawcze w C#?

Właściwości samowykonawcze zapewniają skróconą formę deklaracji właściwości w C#. Pozwalają na zdefiniowanie właściwości bez konieczności jawnego pisania oddzielnego pola, gettera i settera. Kompilator automatycznie tworzy pole pomocnicze.

Jak można stworzyć właściwość tylko do odczytu w C#?

W C# można stworzyć właściwość tylko do odczytu poprzez pominięcie settera w deklaracji właściwości. Oznacza to, że właściwość może być ustawiona tylko w obrębie klasy, np. w konstruktorze, i nie może być modyfikowana zewnętrznie.

Jak używać prywatnych setterów w C#?

Prywatne settery w C# pozwalają na modyfikację właściwości tylko w obrębie klasy, w której są zadeklarowane, jednocześnie umożliwiając zewnętrznemu kodowi odczytanie właściwości. To jest przydatne w podtrzymywaniu integralności danych przy jednoczesnym zapewnieniu kontrolowanego dostępu.

Czy można nadpisać zachowanie właściwości w klasach pochodnych w C#?

Tak, w C# można nadpisać zachowanie właściwości w klasach pochodnych, oznaczając właściwość w klasie bazowej jako virtual i używając słowa kluczowego override w klasie pochodnej. To pozwala na dostosowanie zachowania gettera i settera.

Jak przekonwertować HTML na PDF w języku C#?

Możesz użyć metody RenderHtmlAsPdf biblioteki IronPDF do konwersji ciągów HTML na pliki PDF. Możesz również konwertować pliki HTML na pliki PDF za pomocą metody RenderHtmlFileAsPdf.

Jakie narzędzia są dostępne do ulepszania programowania w języku C# o funkcje związane z plikami PDF i BarCode?

Pakiet Iron Suite zawiera narzędzia takie jak IronPDF i IronBarcode, które usprawniają programowanie w języku C#, oferując funkcje takie jak zarządzanie plikami PDF oraz odczyt i zapis kodów kreskowych. Narzędzia te płynnie integrują się z projektami C#.

Dlaczego pakiet Iron Suite jest przydatny dla programistów C#?

Pakiet Iron Suite jest przydatny dla programistów C#, ponieważ oferuje szereg zaawansowanych narzędzi, które płynnie integrują się z projektami C#. Narzędzia te zapewniają zaawansowane funkcje, takie jak zarządzanie plikami PDF, obróbka plików Excel, funkcje OCR oraz odczyt i zapis kodów kreskowych.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie