using System; using System.Collections.Generic; using System.Linq; using System.Text; region 概述 //在類聲明中使用sealed可防止其它類繼承此類;在方法聲明中使用sealed修飾符可防止擴充類重寫此方法 ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#region 概述
//在類聲明中使用sealed可防止其它類繼承此類;在方法聲明中使用sealed修飾符可防止擴充類重寫此方法。
//sealed修飾符主要用於防止非有意的派生,但是它還能促使某些運行時優化。具體說來,由於密封類永遠不會有任何派生類,所以對密封類的實例的虛擬函數成員的調用可以轉換為非虛擬調用來處理。
//密封類:
//密封類在聲明中使用sealed 修飾符,這樣就可以防止該類被其它類繼承。如果試圖將一個密封類作為其它類的基類,C#將提示出錯。理所當然,密封類不能同時又是抽象類,因為抽象總是希望被繼承的。
//在哪些場合下使用密封類呢?實際上,密封類中不可能有派生類。如果密封類實例中存在虛成員函數,該成員函數可以轉化為非虛的,函數修飾符virtual 不再生效。
#endregion
namespace Sealed密封類
{
class NOSealed
{
public static void OO()
{
Console.WriteLine("沒有使用密封");
}
}
sealed class YESSealed
{
public static void OO()
{
Console.WriteLine("使用了密封");
}
}
class MyClass : NOSealed //YESSealed 那就錯了
{
public new void OO()
{
Console.WriteLine("沒有繼承密封");
}
}
//密封類不可以被繼承,可以被調用
sealed class mysealed //聲明為密封類
{
public int x;
public int y;
}
class Program
{
static void Main(string[] args)
{
NOSealed.OO();
MyClass M = new MyClass();
M.OO();
//調用密封類
YESSealed.OO();
mysealed m = new mysealed();
m.x = 100;
m.y = 200;
Console.WriteLine("x={0}, y = {1}", m.x, m.y);
Console.ReadLine();
Console.ReadKey();
}
}
}