へたれの日々

.NETとへたれな僕の奮闘日記

  ホーム :: 連絡をする :: 同期する  :: Login
投稿数  6  :: 記事 38 :: コメント 3571 :: トラックバック 2

記事カテゴリ

書庫

日記カテゴリ

リンク

シールクラスは、基本クラスや抽象クラスになることはできません。

このクラスは、主に派生を防ぐために使用します。

一方、シールメソッドはオーバーライドを拒否することができます。

なぜ、このようなメソッドが必要なのかというと、仮想メソッドのオーバーライドはクラス階層が何段続いてもオーバーライドすることができます。

特定のオーバーライド以降、メソッドをオーバーライドしてほしくない時にシールメソッドを使用します。

これらの宣言には sealed 修飾子を指定します。

  • sealed class クラス名 // シールクラス
    {
    }

シールクラスの使用例。

sealed class SealedClass
{
    public void Write()
    {
        Console.WriteLine("シールクラス");
    }
}

// class MyClass : SealedClass // 継承はできないため、エラーが起こります。

class MyClass
{
    static void Main()
    {
        SealedClass sc = new SealedClass(); // 継承が禁止されているだけなので問題ありません。
        sc.Write();
    }
}

 

  • class クラス名
    {
        sealed override 戻り値 メソッド名() { } // シールメソッド
    }

シールメソッドの使用例

class ClassA
{
    public virtual void Write()
    {
        Console.WriteLine("基底クラス");
    }
}

class ClassB : ClassA
{
    public sealed override void Write()
    {
        Console.WriteLine("シールメソッド");
    }
}

class ClassC : ClassB
{
    // 基底クラスで sealed が指定されているため、オーバーライドはできません。
    // public override void Write()
    // {
    //     WriteLine("あれれ");
    // }

}

class MyClass
{
    static void Main()
    {
        ClassA cA = new ClassB();
        cA.Write(); // シールが指定していない場合は、「あれれ」が出力されます。
    }
}

 

投稿日時 : 2007年1月22日 16:53

コメント

# grveUdKaLSbcns 2021/07/03 3:23 https://amzn.to/365xyVY
Really informative blog article.Thanks Again. Great.

コメントの投稿

タイトル:
名前:
Url:
コメント: