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。