溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Static修飾的作用是什么

發布時間:2021-07-07 16:21:08 來源:億速云 閱讀:536 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關C#中Static修飾的作用是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1.類的靜態成員:

classA  {  private  staticints_  }   intA::s_=0 //注意,這里沒有static的修飾!

類的靜態成員是該類所有實例的共用成員,也就是在該類的范疇內是個全局變量,也可以理解為是一個名為A::s_的全局變量,只不過它是帶有類安全屬性的,道理很簡單,因為它是在程序初始化的時候分配的,所以只分配一次,所以就是共用的,
類的靜態成員必須初始化,道理也是一樣的,因為它是在程序初始化的時候分配的,所以必須有初始化,類中只是聲明,在cpp中才是初始化,你可以在初始化的代碼上放個斷點,在程序執行main的***條語句之前就會先走到那,如果你的靜態成員是個類,那么就會調用到它的構造函數。

2.類的靜態函數:

classA  {  private:  staticvoidfunc(int);  }

實現的時候也不需要C# Static修飾,因為Static是聲明性關鍵字,類的靜態函數是在該類的范疇內的全局函數,不能訪問類的私有成員,只能訪問類的靜態成員,不需要類的實例即可調用,實際上,它就是增加了類的訪問權限的全局函數:void A::func(int),靜態成員函數可以繼承和覆蓋,但無法是虛函數。

3.只在cpp內有效的全局變量:

在cpp文件的全局范圍內聲明:
Static int g_ = 0  這個變量的含義是在該cpp內有效,但是其他的cpp文件不能訪問這個變量,如果有兩個cpp文件聲明了同名的全局靜態變量,那么他們實際上是獨立的兩個變量。

如果不使用Static聲明全局變量:
int g_ = 0  那么將無法保證這個變量不被別的cpp共享,也無法保證一定能被別的cpp共享,因為要讓多個cpp共享一個全局變量,應將它聲明為extern(外部)的,也有可能編譯會報告變量被重復定義,總之不建議這樣的寫法,不明確這個全局變量的用法。

如果在一個頭文件中聲明:
Static int g_vaule = 0  那么會為每個包含該頭文件的cpp都創建一個全局變量,但他們都是獨立的,所以也不建議這樣的寫法,一樣不明確需要怎樣使用這個變量,因為只是創建了一組同名而不同作用域的變量。

這里順便說一下如何聲明所有cpp可共享的全局變量,在頭文件里聲明為extern的:
extern int g_  注意,不要初始化值!

然后在其中任何一個包含該頭文件的cpp中初始化(一次)就好:
int g_ = 0  初始化一樣不要extern修飾,因為extern也是聲明性關鍵字。
然后所有包含該頭文件的cpp文件都可以用g_這個名字訪問相同的一個變量。

4.只在cpp內有效的全局函數:

在cpp內聲明:
Static void func()  函數的實現不需要C# Static修飾,那么這個函數只可在本cpp內使用,不會同其他cpp中的同名函數引起沖突,道理和如果不使用Static會引起的問題和第3點一樣,不要在頭文件中聲明Static的全局函數,不要在cpp內聲明非Static的全局函數,如果你要在多個cpp中復用該函數,就把它的聲明提到頭文件里去,否則在cpp內部聲明需要加上C# Static修飾,在C語言中這點由為重要!

關于C#中Static修飾的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女