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 -

  1. C # Jagged Arrays
  2. Palindrom w C #
  3. Dziedziczenie w C #
  4. Instrukcja Break w Javie
  5. Instrukcja Break w JavaScript
  6. Palindrom w JavaScript
  7. Rzut vs Rzuty | 5 najważniejszych różnic, które powinieneś znać
  8. Instrukcja Break w Pythonie z przykładami