C#靜態(tài)方法的使用
一、簡介
使用了static 修飾符的方法為靜態(tài)方法,反之則是非靜態(tài)方法。 靜態(tài)方法是一種特殊的成員方法,它不屬于類的某一個具體的實(shí)例,而是屬于類本身。所以對靜態(tài)方法不需要首先創(chuàng)建一個類的實(shí)例,而是采用類名.靜態(tài)方法的格式 。除此之外,靜態(tài)方法和非靜態(tài)方法有如下區(qū)別:
1.靜態(tài)方法不需要類實(shí)例化就可以調(diào)用,反之非靜態(tài)方法需要實(shí)例化后才能調(diào)用;
2.靜態(tài)方法只能訪問靜態(tài)成員和方法,非靜態(tài)方法都可以訪問;
3.靜態(tài)方法不能標(biāo)記為override,導(dǎo)致派生類不能重寫,但是可以訪問;
4.靜態(tài)成員是在第一次使用時進(jìn)行初始化。非靜態(tài)的成員是在創(chuàng)建對象的時候,從內(nèi)存分配上來說靜態(tài)是連續(xù)的,非靜態(tài)在內(nèi)存的存儲上是離散的,因此靜態(tài)方法和非靜態(tài)方法,在調(diào)用速度上,靜態(tài)方法速度一定會快點(diǎn),因?yàn)榉庆o態(tài)方法需要實(shí)例化,分配內(nèi)存,但靜態(tài)方法不用,但是這種速度上差異可以忽略不計(jì)
5.static方法是類中的一個成員方法,屬于整個類,即不用創(chuàng)建任何對象也可以直接調(diào)用,static內(nèi)部只能出現(xiàn)static變量和其他static方法。而且static方法中還不能使用this....等關(guān)鍵字,因?yàn)樗菍儆谡麄€類!
靜態(tài)方法:原理就是共享代碼段 共享代碼段不會產(chǎn)生任何問題 因?yàn)榇a段都是給CPU作為"讀取"用的,除非你進(jìn)行惡意"修改"運(yùn)行時的代碼段 所以靜態(tài)方法是可以放心使用的 。
靜態(tài)變量:原理就是共享數(shù)據(jù)段 同上 只要沒有進(jìn)行"寫入"操作就不會產(chǎn)生問題 但是數(shù)據(jù)通常都是用于讀和寫所以靜態(tài)變量要注意使用。
二、代碼案例
public class A
{
public static void Method1()
{
Console.WriteLine("我是Method1,是靜態(tài)方法");
//靜態(tài)方法中互獲取類名
string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
Console.WriteLine("Method1方法所在類:{0}", className);//命名空間.類名
}
public void Method2()
{
Console.WriteLine("我是Method2,不是靜態(tài)方法");
//非靜態(tài)方法獲取類名
string className = this.GetType().FullName;
Console.WriteLine("Method2方法所在類:{0}", className);//命名空間.類名;和上面方法同在一個類,所以輸出結(jié)果相同
}
}
class Program
{
public static void Method3()
{
Console.WriteLine("我是Method3,不是是靜態(tài)方法");
}
static void Main(string[] args)
{
A.Method1();
// A.Method2(); //報(bào)錯,非靜態(tài)方法必須通過實(shí)例化才能引用
A a = new A();
a.Method2();
Method3();
}
}三、總結(jié)
使用靜態(tài)得準(zhǔn)則就是:
1.保證不會產(chǎn)生并發(fā)。
2. 在方便快捷和開發(fā)難度上做一個衡量。
到此這篇關(guān)于C#靜態(tài)方法的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器
這篇文章主要介紹了C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器的相關(guān)代碼和使用方法,非常簡單實(shí)用,需要的朋友可以參考下2016-07-07
C#實(shí)現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法
這篇文章主要介紹了C#實(shí)現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法,涉及C#針對窗體及圖片操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C#使用泛型隊(duì)列Queue實(shí)現(xiàn)生產(chǎn)消費(fèi)模式
這篇文章介紹了C#使用泛型隊(duì)列Queue實(shí)現(xiàn)生產(chǎn)消費(fèi)模式的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
詳解C#如何在不同工作簿之間復(fù)制選定單元格區(qū)域
處理Excel文檔時,我們經(jīng)常需要將數(shù)據(jù)整合到一個工作表以便于我們進(jìn)行管理或數(shù)據(jù)對比。本文將演示如何通過編程方式將選定的單元格區(qū)域從一個工作簿復(fù)制到另一個工作簿2023-02-02
C#使用文件流FileStream和內(nèi)存流MemoryStream操作底層字節(jié)數(shù)組byte[]
這篇文章介紹了C#使用文件流FileStream和內(nèi)存流MemoryStream操作底層字節(jié)數(shù)組byte[]的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05

