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?

Wyobraź sobie posiadanie public class Car z właściwością 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.

Getter pozwoliłby użytkownikom pobrać wartość private string description, nie dając im bezpośredniego dostępu do jego 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. Najczęściej stosowane modyfikatory to public i private.

  • Public: Pola lub właściwości zadeklarowane jako public mogą być dostępne z dowolnego miejsca w twoim programie. Na przykład, możesz mieć właściwość public int Age, która może być dostępna i modyfikowana przez dowolną część twojego kodu.
  • Private: Właściwości lub pola zadeklarowane jako private mogą być dostępne tylko wewnątrz określonej klasy, na przykład 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 powyższym class Person mamy zarówno getter (GetName), jak i setter (SetName) dla właściwości name. Kiedy uruchomisz metodę static void Main, wydrukuje 'John', ponieważ ustawiliśmy tę wartość dla nazwy za pomocą settera.

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# możesz używać automatycznych właściwości, które dają skróconą formę deklarowania private field i powiązanej z nim właściwości. 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, właściwość Name jest zarówno getterem, jak i setterem, które są automatycznie wdrożone. Kompilator C# tworzy pole private string name w tle, a właściwość Name zapewnia dostęp 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.

Załóżmy, że chcemy dodać właściwość string Description tylko do odczytu do naszej klasy Person:

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 przykładzie, właściwość Description może być ustawiana 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. Osiąga się to za pomocą 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, właściwość Description posiada private set, co oznacza, że nie może być zmieniana z zewnątrz klasy, co zapewnia integralność 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 przykładzie, klasa Student dziedziczy po Person i przesłania setter właściwości Name. Dodaje ona sprawdzenie walidacyjne przed ustawieniem nazwy, zapewniając, że nie jest pusta lub null.

Wprowadzenie Iron Suite do ulepszania twojego programowania w 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 — optyczne rozpoznawanie znaków w 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: Pomagają w dostępie i modyfikacji prywatnych pól klasy.
  2. Auto Properties: Elegancki sposób na posiadanie automatycznych getterów i setterów przy pomocy właściwości automatycznie wdrożonych.
  3. Access Modifiers: Pomagają dostosować dostępność właściwości.

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 będziesz gotów do podjęcia decyzji, licencje indywidualne zaczynają się od $799. 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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie