腳踏實地學C 4 靜態類

2022-01-11 12:06:53 字數 1087 閱讀 5540

起因

問:靜態類可以實現介面及繼承?

答:都不可以

思考:為什麼不可以呢?

學習靜態類,有時我們又稱為工具類(密封抽象類),從msdn文件沒有直接靜態類的定義,這裡只能說用static(不能用於結構,只能用於類)關鍵字宣告的類,就是靜態類。

靜態類與非靜態類的區別:靜態類不能例項化,就是不能通過使用 new 關鍵字建立靜態類型別的變數。通過類名本身訪問自身成員;   

特性:1、僅包含靜態成員(字段、方法、屬性、事件)

2、無法例項化

3、是密封的

4、不能包含例項建構函式

定義靜態類及其使用

//定義靜態類和靜態方法,未定義靜態字段、屬性、事件

public static class commonhelper

}

commonhelper.printcontent(); //呼叫靜態類的靜態方法
靜態類載入時機:和所有類型別一樣,當載入引用靜態類的程式時,.net framework 公共語言執行時 (clr) 將載入該靜態類的型別資訊。程式不能指定載入靜態類的確切時間。但是,可以保證在程式中首次引用該類前載入該類,並初始化該類的字段並呼叫其靜態建構函式。靜態建構函式僅呼叫一次,在程式駐留的應用程式域的生存期內,靜態類一直保留在記憶體中。

靜態類的本質

通過靜態類的的特性,就可以回答

1、靜態類為可以實現介面?不可以,因為靜態類無法例項化(只有類的例項才可以呼叫類中的介面方法)

2、靜態類可以被繼承嗎?不可以,因為靜態類是密封的

這樣來回答比較籠統,也不具有說服力哈,通過生成的il就能清楚知道為什麼了!

.class public abstract auto ansi sealed beforefieldinit commonhelper  

extends [mscorlib]system.object

//通過abstract關鍵字 不能例項化

//通過sealed關鍵字 不能讓其他類繼承

}

靜態類、靜態成員所分配的內存在程式結束時,才能被釋放

腳踏實地學C 3 裝箱和拆箱

裝箱 一種接受值型別的值,根據這個值在堆中建立乙個完整的引用型別物件並返回物件的引用 堆位址 的隱式轉換 int i number 2 在棧中宣告int型別i number變數並初始化 object o number null 在棧中宣告object型別的o number變數並初始化值為null,不...

腳踏實地學C 2 引用型別和值型別

引用型別和值型別介紹 clr支援兩種型別,引用型別和值型別兩種基本的型別 值型別下有int double 列舉等型別同時也可以稱為結構,如int結構型別 double結構型別,所有的值型別都是隱式密封 sealed 的,防止將乙個值型別作其他引用型別或值型別的基類。任何成為類的都是引用型別。如str...

腳踏實地小組的漏洞復現報告

1.1專案背景 1.2實施目的 1 熟悉用dedecms搭建 2 熟悉burp工具的使用方法 3 會使用工具進行主機漏洞的抓包 4 通過實驗了解如何提高主機的安全性 漏洞是指使用者的windows作業系統程式或者其它應用程式在邏輯設計上的缺陷或在編寫時產生的錯誤,這個缺陷或錯誤可能被不法者或者電腦黑...