C#密封類


C#密封類

一、密封類

1. 密封類的定義

如果我們不希望自己編寫的類被繼承;如果有的類已經沒有再被繼承的必要,這時,我們可以使用sealed修飾符在類中進行聲明,以達到該類不能派生其它類的目的,該類就被稱為密封類。

2. 密封類與抽象類

密封類不能同時又是抽象類,因為密封類不能用作基類、也不能被繼承,而抽象類總是希望被繼承的。

3. 什么情況下使用密封類

需要阻止其它程序員無意中繼承該類的時候;在程序運行時需要起到優化效果的時候,可以使用密封類。

4. 示例
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        sealed class A  // 密封類。不能從該類再派生出其它類
        {
            public int x;
            public int y;
        }
        static void Main(string[] args)
        {
            // C#密封類-www.baike369.com
            A a = new A();
            a.x = 10;
            a.y = 20;
            Console.WriteLine("x = {0}; y = {1}", a.x, a.y);
            Console.ReadLine();
        }
    }
}

運行結果:

x = 10; y = 20二、密封方法

1. 密封方法

對類中的方法可以使用sealed修飾符,我們稱該方法為密封方法。

不是類的每個成員方法都可以作為密封方法,密封方法必須對基類的虛方法進行重載,提供具體的實現方法。所以,在方法的聲明中,sealed修飾符總是和override修飾符同時使用,sealed修飾符位於override修飾符前面。

2. 示例
 
class A
{
    public virtual void F()
    {
        Console.WriteLine("A.F");
    }
    public virtual void G()
    {
        Console.WriteLine("A.G");
    }
}

class B : A
{
    sealed override public void F()
    {
        Console.WriteLine("B.F");
    }
    override public void G()
    {
        Console.WriteLine("B.G");
    }
}

class C : B
{
    override public void G()
    {
        Console.WriteLine("C.G");
    }
}

類B對基類A中的兩個虛方法都進行了重載,其中F方法使用了sealed修飾符,成為一個密封方法。G方法不是密封方法,所以在B的派生類C中,可以重載方法G,但是不能重載方法F。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM