香港網(wǎng)站不備案淘寶站外引流推廣方法
目錄
一、定義與特性
1.何時使用密封類
2.定義
3.特性
二、示例
????????如果所有的類都可以被繼承,很容易導致類的層次結(jié)構(gòu)變得十分復雜。使對類的理解和使用變得十分困難。為了避免濫用繼承,C#中提出了密封類的概念。
一、定義與特性
????????密封類可以用來限制擴展性,如果密封了某個類,則其他類不能從該類繼承;如果密封了某個成員,則派生類不能重寫該成員的實現(xiàn)。默認情況下,不應密封類型和成員。
1.何時使用密封類
C#中使用密封類時,如果類滿足如下條件,則應將其密封:
? 類包含帶有安全敏感信息的繼承的受保護成員。
? 類繼承多個虛成員,并且密封每個成員的開發(fā)和測試開銷明顯大于密封整個類。
? 類是一個要求使用反射進行快速搜索的屬性。密封屬性可提高反射在檢索屬性時的性能。
2.定義
C#中聲明密封類時需要使用sealed關(guān)鍵字,具體語法格式如下:
訪問修飾符 sealed class 類名:基類或接口
{//類成員
}
3.特性
- 密封類不能作為基類被繼承,但它可以繼承別的類或接口。
- 在密封類中不能聲明受保護成員或虛成員,因為受保護成員只能從派生類進行訪問,而虛成員只能在派生類中重寫。
- 由于密封類的不可繼承性,因此密封類不能聲明為抽象的,即sealed修飾符不能與abstract修飾符同時使用。
- 并不是每個方法都可以聲明為密封方法,密封方法只能用于對基類的虛方法進行實現(xiàn),并提供具體的實現(xiàn)。所以,聲明密封方法時,sealed修飾符總是和override修飾符同時使用。
- 密封類除了不能被繼承外,與非密封類的用法大致相同,只能通過實例化密封類的對象來訪問,而不能被繼承。而密封方法則必須通過重寫基類中的虛方法來實現(xiàn)。
二、示例
????????聲明一個密封類myClass2,繼承自myClass1類,在myClass2密封類中聲明兩個公共屬性,分別用來表示用戶編號和名稱,然后密封并重寫myClass1基類中的虛方法ShowInfo(),并提供具體的實現(xiàn)。最后在主程序類Program的Main()方法中實例化MyClass2密封類的一個對象,然后使用該對 象訪問myClass2密封類中的公共屬性和密封方法。
// 密封類和密封方法
namespace _05
{public class MyClass1{public virtual void Showlnfo() //虛方法,用來顯示信息{}}public sealed class MyClass2 : MyClass1 //密封類,繼承自myClass1{private string id = ""; //string類型變量,用來記錄編號private string name = ""; //string類型變量,用來記錄名稱public string ID //編號屬性{get{return id;}set{id = value;}}public string Name // 名稱屬性{get{return name;}set{name = value;}}public sealed override void Showlnfo() //密封并重寫基類中的Showlnfo()方法{Console.WriteLine(ID + "" + Name);}}class Program{static void Main(string[] args){MyClass2 myclass2 = new() //實例化密封類對象{ID = "BH0001", //為密封類中的編號屬性賦值Name = "TM" //為密封類中的名稱屬性賦值};myclass2.Showlnfo(); //調(diào)用密封類中的密封方法}}
}
//運行結(jié)果:BH0001TM