Запечатанный класс и метод С#
Запечатанный класс и метод C#
В этом руководстве мы узнаем о закрытом классе и методе в C# с помощью примеров.
Запечатанный класс
В C#, когда мы не хотим, чтобы класс наследовался другим классом, мы можем объявить класс как запечатанный класс. .
Запечатанный класс не может иметь производного класса. Мы используем sealed
ключевое слово для создания закрытого класса. Например,
using System;
namespace SealedClass {
sealed class Animal {
}
// trying to inherit sealed class
// Error Code
class Dog : Animal {
}
class Program {
static void Main (string [] args) {
// create an object of Dog class
Dog d1 = new Dog();
Console.ReadLine();
}
}
}
В приведенном выше примере мы создали запечатанный класс Animal. . Здесь мы пытаемся вывести Dog класс из класса Animal класс.
Поскольку запечатанный класс не может быть унаследован, программа выдает следующую ошибку:
error CS0509: 'Dog': cannot derive from sealed type 'Animal'
<час> Закрытый метод
Во время переопределения метода, если мы не хотим, чтобы переопределенный метод был переопределен другим классом, мы можем объявить его как запечатанный метод. .
Мы используем sealed
ключевое слово с переопределенным методом для создания запечатанного метода. Например,
using System;
namespace SealedClass {
class Animal {
public virtual void makeSound() {
Console.WriteLine("Animal Sound");
}
}
class Dog : Animal {
// sealed method
sealed public override void makeSound() {
Console.WriteLine("Dog Sound");
}
}
class Puppy : Dog {
// trying to override sealed method
public override void makeSound() {
Console.WriteLine("Puppy Sound");
}
}
class Program {
static void Main (string [] args) {
// create an object of Puppy class
Puppy d1 = new Puppy();
Console.ReadLine();
}
}
}
В приведенном выше примере мы переопределили функцию makeSound(). метод внутри Dog класс.
// Inside the Dog class
sealed public override void makeSound() {
Console.WriteLine("Dog Sound");
}
Обратите внимание, что мы использовали sealed
ключевое слово с makeSound() . Это означает, что Щенок класс, который наследует Dog классу не разрешено переопределять makeSound() .
Следовательно, мы получаем ошибку
error CS0239: 'Puppy.makeSound()': cannot override inherited member 'Dog.makeSound()' because it is sealed
когда мы пытаемся дополнительно переопределить makeSound() метод внутри Puppy учебный класс.
Примечание :запечатывание переопределенного метода предотвращает переопределение метода при многоуровневом наследовании.
<час>Почему Sealed Class?
1. Мы используем закрытые классы для предотвращения наследования. Поскольку мы не можем наследовать от запечатанного класса, методами в запечатанном классе нельзя управлять из других классов.
Это помогает предотвратить проблемы с безопасностью. Например,
sealed class A {
...
}
// error code
class B : A {
...
}
Как класс A нельзя наследовать, класс B не может переопределять и манипулировать методами класса A .
2. Одно из лучших применений запечатанных классов — когда у вас есть класс со статическими членами.
Ручки класс System.Drawing
namespace — один из примеров запечатанного класса. Ручки класс имеет статические члены, которые представляют перья стандартных цветов. Pens.Blue
представляет собой перо синего цвета.
Язык C
- Класс и объект С#
- Абстрактный класс и метод С#
- Частичный класс C# и частичный метод
- Классы и объекты С++
- Дружественные функции C++ и дружественные классы
- Java — объект и классы
- С# — Наследование
- С# — полиморфизм
- ASTM A729, класс A, двойная нормализованная и закаленная
- ASTM A649, класс 2, нормализованная и закаленная