請問C中static為什麼不能例項化

2022-03-19 17:21:16 字數 4548 閱讀 6008

1樓:匿名使用者

使用 static 修飾符宣告屬於型別本身而不是屬於特定物件的靜態成員.

它不屬於特定物件。所以不能被例項化。

舉個例子。人是一個類。人有腦子。這是一個用static修飾的屬性。

他是針對所有的人類,是人的共同特徵。而不是某個特點物件所特有的(比如張三有腦子,李四沒腦子)

只要是個人,他都有腦子(只是有的人比較腦殘。嘿嘿。)。

既然是人類共有的。那麼他就不能被例項化。

再舉一個能被例項化的例子。還是人這個類。人的身高,這就是一個非static的屬性。

因為每個人的身高是不同的。比如我身材魁梧,達到了1.55米。這個1.55米是描述我的身高,是跟我這個特定的對

象有聯絡的。姚明哥2.26米,這是姚哥的資料。不管是155還是2.26,這都和特定的物件有聯絡,而不是人類所共有的特徵。

所以非static的可以被例項化,而static不能被例項化。

2樓:匿名使用者

c#中只要用了static 關鍵字就代表已經例項化了.一般不推薦使用static 因為效能很差,如果是好幾個類裡面同時需要用到同一個屬性或者成員很多次的話,那麼就可以考慮使用static 但是呼叫的時候不需要new

3樓:匿名使用者

c#中static可以用來修飾類以及類的一些成員(比如函式或者是屬性等),凡是帶有static的自動在這個類被呼叫到的時候自動例項化,且在記憶體中產生一個例項。所以不能例項化(如果可以,那麼你可以無限制建立例項了)

4樓:匿名使用者

static是一個靜態的修飾符,在你呼叫之前他就已經例項化好了,所以不可以再次例項化,記憶體中已經存在該例項化的物件了,

c#中靜態類為什麼定義函式必須加static

5樓:匿名使用者

在類(class)上加入static修飾, 表示該類無法被例項化,並且該類中,無法例項化變數或函式。

那麼如果要在此靜態類中新增函式、變數、屬性,則必須都是靜態的。

靜態類的主要特性:

1:僅包含靜態成員。

2:無法例項化。

3:靜態類的本質,是一個抽象的密封類,所以不能被繼承,也不能被例項化。

4:不能包含例項建構函式。

5:如果一個類下面的所有成員,都需要被共享,那麼可以把這個類定義為靜態類。

換一句大白話,c# 2.0中引入了static修飾詞就是為了控制**中「靜態類內部不允許出現非靜態變數或函式」的。 深一層的原因可能只有搞編譯器的那些人才知道。

所以,可以在普通類中新增靜態方法,但是靜態類中的方法、變數都必須是靜態的。

c#,為什麼要慎用static????

6樓:析君豪

為什麼要慎用?耍要就用,比如一個類只能,它的一個欄位name是整個程式中唯一的,那就用靜態的,這樣就不用每次例項一個物件都得把name給個一樣的值,反正每個物件這個值都是一樣,所以就用靜態設成公用的就得,就好像公廁,是屬於學校的不是屬於班級的,那麼班級都用個靜態的欄位表示公廁就好了

7樓:陽光的雷咩咩

因為全域性變數在一定程度上破壞了物件導向的封裝性。

8樓:奧小

static被認為是從程序導向到物件導向的遺留產物

但當一個類中沒有屬性,只有方法的的時,static類還是可以用的。

9樓:s不知是錯

static變數佔用記憶體時間過長,它所佔用的記憶體可能直到程式結束而長時間得不到釋放

static變數可能會在多處使用多出被更改,一動則全動,不符合低耦合性的設計要求,即樓上所說破壞封裝性的本質原因

應當儘可能的讓功能方法獨立不相互影響

c#中為什麼靜態類不能被繼承?

10樓:匿名使用者

靜態類只用於包含靜態成員的型別,它既不能例項化,靜態類的特性是防止繼承,防止外部來new。它相當於一個sealed abstract類。

static class myutility}靜態類的幾個注意點

靜態類不能有例項構造器。

靜態類不能有任何例項成員。

靜態類不能使用abstract或sealed修飾符。

靜態類預設繼承自system.object根類,不能顯式指定任何其他基類。

靜態類不能指定任何介面實現。

靜態類的成員不能有protected或protected internal訪問保護修飾符。

c#類裡面的static變數,不會在程式啟動時就初始化嗎

11樓:匿名使用者

會的如下圖,在例項化mainwindow的時候,會先執行靜態變數定義語句。

如有疑問,繼續追問。

12樓:超大蒲公英

會延時初始化,在類第一次被用到時,初始化static變數.

13樓:匿名使用者

靜態變數 在用到的時候就會去初始化的。

14樓:

你可以讓它在啟動時初始化。

15樓:四象八卦

可以啊,不過要寫建構函式

16樓:匿名使用者

你在視窗 load事件裡賦值就初始化了

c#中static關鍵字的作用

17樓:匿名使用者

static三種用法:1.用於變數前,表示每次重新使用該變數所在方法、類或自定義類時,變數的值為程式這次執行最後一次為變數賦值時的值,這個方法稱為靜態函式:

private void s()方法第一次呼叫結束後a在記憶體內值為2;方法第一次呼叫結束後a在記憶體內值為3; 2.在方法(函式)前用static修飾,表示此方法為所在類或所在自定義類所有,而不是這個類的例項所有,這個方法稱為靜態方法:情況一:

非靜態方法:class tvoid s(....)}當你在其他方法裡呼叫這個類中的方法s,則需先宣告這個類的變數如:

t sd = new t(....);再在t裡呼叫方法:sd.

s(....);情況2:靜態方法:

class tstatic void s(....)}當你在其他方法裡呼叫這個類中的方法s,則不用先宣告這個類的變數如直接呼叫方法:t.

s(....); 3.用於class前,說明此型別無法新建例項,簡單點說這個型別的方法全是靜態方法,這個類裡的非靜態方法是不能使用的,這個型別稱為靜態類:

static class t~~~~class d}

18樓:匿名使用者

static修飾的變數 方法 你就可以把他們理解成時全域性變數或者方法類的靜態方法不屬於某個例項。屬於整個類!重點就這些!

19樓:匿名使用者

static在c#中的定義是靜態的含義,例如某方法定義成static 修飾符,則表明其是靜態成員,不隨例項來變化,其由類名去訪問,無法例項化去訪問靜態成員。

c# 靜態方法既然不能呼叫非靜態屬性 為何例項化又可以呢 如下

20樓:草薙在

老大,c和this怎麼是一個意思呢,你要知道this只有在例項方法上下文才會出現的,你可能沒理解那句話的意思,靜態方法不能呼叫例項方法是因為靜態方法不存在this變數,所以不能掉包圍類的例項方法,但是不是說不能呼叫任何例項物件的例項方法啊

21樓:匿名使用者

靜態方法main中,是先建立了program類的例項c,此時是可以呼叫c的任何例項方法、屬性的,當然僅限於main方法內部

22樓:匿名使用者

因為maim方法是靜態的方法 , main是程式的入口點,它在編譯時必須是能夠唯一確定其位置的,不能發生變化的方法,其呼叫不能產生任何的二意性,因此必須是靜態的

靜態函式不屬於任何一個物件,而this是指向當前例項的,所以在靜態函式裡面就不能有this的,如果是非靜態函式就可以 例如

public string a;

public string b

set}

static void main(string args)private void test()

23樓:

是c# 靜態方法不能直接呼叫非靜態屬性!!!

為什麼c#類的靜態方法,普通例項不能呼叫

24樓:海綿抱抱的海角

不是普通例項不能呼叫,而是說不作為普通例項的成員方法來呼叫舉個例子:

public class a

public void dosthelse()}這裡例項成員同樣可以通過成員函式來呼叫靜態方法。

靜態方法不屬於類例項,所以不能直接通過例項來訪問

C中a是什麼意思,請問C中aa是什麼意思?

a a a 是拷貝建構函式。前面的a是類名,後面的a a 是對一個a型別物件a的引用,如回果沒有答 即 a a 裡面的a是傳進來引數的一個副本,對a的操作不會改變原來的物件,但要構造這個臨時物件a,如果有 即 a a 就是對傳進來的物件a的引用,可以直接操作物件a,沒有構造臨時物件在傳進來,這樣節省...

為什麼我的電腦C盤不能格,為什麼我的電腦C 盤不能 格

在windows系統中,無法通過format c 或者對c盤點右鍵選擇 格式化 的方式來格式化。因為c盤是系統盤,正在使用,顯然不能格式化。要格式化c盤,只有通過軟盤 光碟來啟動電腦,在dos提示符下使用format c s 來格式化。但有一個問題是,現在很多電腦的c盤是ntfs格式,這種情況在do...

請問為什麼不能熬夜啊,為什麼減肥不能熬夜

熬夜危害 長期熬夜的人 受損也會非常嚴重,休息最好的時間就是在晚上,晚上如果晚睡會增加 的負擔,引起一系列的 問題,膚色暗淡,起痘。經常熬夜的人還會引起過度肥胖,熬夜者喜歡吃夜宵,夜晚進食不但會使人難以入睡,還會使隔日早晨食慾不振,如此造成的營養不均衡,就會引起過度肥胖。熬夜會對身體造成多種損害 1...