C# の封印されたクラスとメソッド
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();
}
}
}
上記の例では、sealed クラス Animal を作成しました。 .ここでは、Dog を導出しようとしています。 動物のクラス クラス。
シール クラスは継承できないため、プログラムは次のエラーを生成します:
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 内のメソッド クラス。
注意 :オーバーライドされたメソッドを封印すると、マルチレベル継承でのメソッドのオーバーライドが防止されます。
なぜシールド クラスなのか
1.継承を防ぐためにシールされたクラスを使用します。シール クラスから継承できないため、シール クラスのメソッドを他のクラスから操作することはできません。
セキュリティ上の問題を防ぐのに役立ちます。たとえば、
sealed class A {
...
}
// error code
class B : A {
...
}
クラス A として クラス B は継承できません クラス A のメソッドをオーバーライドして操作することはできません .
2. シール クラスの最適な用途の 1 つは、静的メンバーを持つクラスがある場合です。
ペン System.Drawing
のクラス 名前空間は、シール クラスの例の 1 つです。 ペン クラスには、標準色のペンを表す静的メンバーがあります。 Pens.Blue
青色のペンを表します。
C言語