Co to jest Sealed Class w C #?
Klasa zapieczętowana to klasa, która nie zezwala na dziedziczenie, co oznacza, że klasa zapieczętowana ograniczy użytkowników do dziedziczenia klasy. Klasa zapieczętowana zdefiniowana za pomocą słowa kluczowego zapieczętowanego powiadamia kompilator tak, jak zdefiniowana klasa jest zapieczętowana, tak że nie można go rozszerzyć i nie ma szans na odziedziczenie określonej klasy. Klasa zapieczętowana ogranicza klasę wywodzącą się z klasy zapieczętowanej. Głównym celem zapieczętowanej klasy jest zaprzestanie dziedziczenia określonej klasy od innych klas. W C #, dla naszego bezpieczeństwa kodu, wybieramy zapieczętowaną klasę, w której możemy zabezpieczyć przesłanianie określonych metod lub właściwości w zależności od naszych warunków.
Klasa zapieczętowana to klasa, w której nie możemy wyprowadzić ani stworzyć nowej klasy. Innymi słowy, klasa zapieczętowana nie może być dziedziczona przez inne klasy i za pomocą modyfikatora zapieczętowanego możemy również zdefiniować klasę zadeklarowaną jako klasa zapieczętowana.
Składnia
sealed class _className
(
//data members
//methods
)
Kod:
sealed class Demo1 ()
class Demo2 : Demo1() //invalid
Aby utworzyć dowolną klasę jako klasę zapieczętowaną, musimy użyć słowa kluczowego sealed.
Jak działa Sealed Class w C #?
Ogólnie, tworząc klasę za pomocą dziedziczenia, dziedziczymy wszystkie metody i właściwości w dowolnej z klas. Używając zapieczętowanej klasy, możemy ograniczyć dostęp do klas i jej członków za pomocą zapieczętowanego słowa kluczowego, a także możemy uniknąć dziedziczenia zdefiniowanych klas od innych klas. W języku C # klasa zapieczętowana jest klasą, której nie może odziedziczyć inna klasa, ale można ją utworzyć. Klasa Sealed często używana ze względów bezpieczeństwa przed uniemożliwieniem pochodnej klasie niechcianym użytkownikom. Klasa zapieczętowana jest w przeważającej części zaprojektowana tak, aby graniczyła z rozszerzalnością klas. Podczas pracy z Sealed Class istnieje kilka punktów, są to:
- Klasa zapieczętowana całkowicie różni się od klasy abstrakcyjnej.
- Metod abstrakcyjnych nie można stosować w zapieczętowanej klasie.
- W hierarchii dziedziczenia musi to być najniższa klasa.
- Klasa zamknięta używana celowo w celu uniknięcia dziedziczenia.
- Zapieczętowane słowo kluczowe używane z metodami, klasami, właściwościami i instancją.
Zobaczmy, jak działa proces Sealed Class:
Kod:
using System;
public class DemoClass
(
public static void Main (string() args)
(
SealedDemo _sealedObject=new SealedDemo();
int result=_sealedObject.Addition(5, 5);
Console.WriteLine("Total Value="+result.ToString());
)
) //sealedClass starts here
sealed class SealedDemo
(
public int Addition(int x, int y)
(
return x+y;
)
)
Wynik:
Gdy klasa jest zdefiniowana jako zapieczętowana, to nie można odziedziczyć tej klasy, a także że Sealed Class nie może być używana jako klasa podstawowa. Klasa zapieczętowana jest używana głównie w celu ograniczenia aspektu dziedziczenia OOP.
Metody zamknięte w C #
Metody zapieczętowane są zdefiniowane tak, że metoda jest klasą nadrzędną i tej metody nie można zastąpić w klasie podrzędnej. Gdy metoda zostanie zadeklarowana jako wirtualna w klasie, każda z klas potomnych może zastąpić metodę:
Przykład 1
Kod:
using System;
public class Sample_Employee
(
protected int Emp_id, Emp_age;
protected string Emp_name, Emp_address;
public virtual void GetEmployeeDetails()
(
Console.WriteLine("EMPLOYEE DETAILS");
Console.WriteLine("EMPLOYEE ID");
Emp_id = int.Parse(Console.ReadLine());
Console.WriteLine("EMPLOYEE NAME");
Emp_name = Console.ReadLine();
Console.WriteLine("EMPLOYEE ADDRESS");
Emp_address = Console.ReadLine();
Console.WriteLine("EMPLOYEE AGE");
Emp_age = int.Parse(Console.ReadLine());
)
public virtual void DisplayEmployeeDetails()
(
Console.WriteLine("\nEMPLOEE DETAILS:");
Console.WriteLine("EMPLOYEE ID : " + Emp_id);
Console.WriteLine("EMPLOYEE NAME : " + Emp_name);
Console.WriteLine("EMPLOYEE ADDRESS :" + Emp_address);
Console.WriteLine("EMPLOYEE AGE : " + Emp_age);
)
)
public sealed class Emp_Manager : Sample_Employee
(
double Bonus, CA;
public override void GetEmployeeDetails()
(
Console.WriteLine("ENTER MANAGER DETAILS:");
Console.WriteLine("ENTER THE ID");
Emp_id = int.Parse(Console.ReadLine());
Console.WriteLine("ENTER THE NAME");
Emp_name = Console.ReadLine();
Console.WriteLine("ENTER THE BONUS");
Bonus = double.Parse(Console.ReadLine());
Console.WriteLine("ENTER THE CA");
CA = Convert.ToDouble(Console.ReadLine());
)
public override void DisplayEmployeeDetails()
(
Console.WriteLine("MANAGER DETAILS");
Console.WriteLine("EMPLOYEE ID: " + Emp_id);
Console.WriteLine("EMPLOYEE NAME: " + Emp_name);
Console.WriteLine("MANAGER BONUS: " + Bonus);
Console.WriteLine("MANAGER CA : " + CA);
)
)
class Program
(
static void Main(string() args)
(
Emp_Manager m1 = new Emp_Manager ();
m1.GetEmployeeDetails();
m1.DisplayEmployeeDetails();
Console.ReadKey();
)
)
Wynik:
Możemy użyć zapieczętowanego modyfikatora właściwości lub metody, która zastępuje metodę wirtualną w klasie bazowej, co pozwala nam pozwolić klasom wywodzić się z klasy i zabezpieczyć programistów używających klas przed przesłonięciem określonych właściwości lub metod wirtualnych. Istnieje kilka punktów, które musimy zdefiniować zapieczętowaną klasą:
- Nigdy nie chcemy zastępować wszystkich właściwości lub metod klasy w podklasach
- Nie ma potrzeby rozszerzania naszych funkcjonalności klasowych.
Przykład nr 2
Głównym celem korzystania z zapieczętowanej klasy jest zapewnienie dziedziczenia klasy; nie wymagaliśmy żadnych klas, aby zwiększyć funkcjonalność klasy. Zobaczmy przykładowy program dla zapieczętowanej klasy:
Kod:
using System;
using System.Text;
namespace test_SealedClass
(
public class SampleProgram1
(
public sealed class TestBaseClass
(
public static void TestDisplay()
(
Console.WriteLine("Here the SealedClass cannot be inherited");
)
)
public class TestDerived : TestBaseClass
(
// here Derived class cannot be inherited because it's a sealed class
)
static void Main(string() args)
(
TestBaseClass _object = new TestBaseClass();
_object.TestDisplay();
Console.ReadLine();
)
)
)
Podczas próby uzyskania klasy z zapieczętowanego kompilatora klas zgłasza błąd błędu. ”TestDerived: nie można wyprowadzić z zapieczętowanego typu TestBaseClass”.
Zalety w klasie zamkniętej
Zobaczmy następujące ważne punkty, które musimy wziąć pod uwagę na temat zapieczętowanego słowa kluczowego w języku c #:
- Ze względów bezpieczeństwa klasa ogranicza dziedziczenie, jeśli klasa zostanie zadeklarowana jako klasa zapieczętowana.
- W przypadku klasy i metody C # stosuje ograniczenia podczas używania zapieczętowanych słów kluczowych.
- Zmienna lokalna nie jest zapieczętowana w C #
- Ma to zawsze zastosowanie, gdy używane jest zastąpienie zapieczętowanego słowa kluczowego we właściwości lub metodzie.
- Zapieczętowany modyfikator pozwala uniknąć dziedziczenia klasy.
Wniosek
W tym artykule przedstawiono lepszy widok zapieczętowanej klasy i zapieczętowanej metody oraz wyjaśniono Sealed Class i Sealed Methods w C # z kilkoma przykładami. Mam nadzieję, że ten artykuł pomoże ci spełnić twoje wymagania.
Polecane artykuły
To jest przewodnik po Sealed Class w C #. Tutaj omawiamy, jak działa klasa zamknięta w języku C #, i metody w klasie zamkniętej z zaletami. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej -
- C # Jagged Arrays
- Palindrom w C #
- Dziedziczenie w C #
- Instrukcja Break w Javie
- Instrukcja Break w JavaScript
- Palindrom w JavaScript
- Rzut vs Rzuty | 5 najważniejszych różnic, które powinieneś znać
- Instrukcja Break w Pythonie z przykładami