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

時間 2021-05-07 20:00:10

1樓:草薙在

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

2樓:匿名使用者

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

3樓:匿名使用者

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

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

public string a;

public string b

set}

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

4樓:

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

c#中的同一個類非靜態方法為什麼可以直接呼叫其他非靜態方法而不需要new一下例項?

5樓:碧野花香四溢

你說的前提是調非靜態方法,那這個方法必須屬於一個具體的物件,假設main方法調,不論這個main方法是在同一個類裡,還是另一個類裡,呼叫前都需要new一次,第一次用物件名來調,第二次還是用物件名來調 ,不用再new。如果重複new,那是脫了褲子打屁,不是和前面的new一樣嗎,何必重複寫一句!!如果是調靜態方法,它不屬於物件,又分兩種情況來呼叫:

第一種,在同一個類裡直接寫:方法名()就可以了,前面不用加類名或物件名;第二種,main在b類裡,呼叫a類的方法,用類名來調啊,要寫成:a類名.

方法名()。如果你連靜態和非靜態都不懂,我寫這麼多相當於對牛彈琴了!

6樓:匿名使用者

你覺得左手去呼叫右手, 需要重新創造一個人再去呼叫右手嗎?

c# 靜態方法不能直接呼叫非靜態成員,請問哪位高手知道如何間接呼叫非靜態成員呢?

7樓:匿名使用者

class a

public void g()//非靜態 }一般情況f()不能呼叫g(),但是你可以增加一個靜態成員class a

public void g()//非靜態 }

8樓:匿名使用者

建立一個例項,通過例項訪問,只能這樣

9樓:匿名使用者

class a

}//呼叫

a a = new a();

a.f();

c#呼叫dll,非靜態的類要例項化,靜態的類就可以直接呼叫類名和方法,為什麼?

10樓:匿名使用者

因為.net的規則就是這樣。

是為是了使用方便吧。

經常的用的就弄成靜態類,載入的時候就在記憶體中,可以快速計算操作。

不經常用的時候需要例項化,使用的時候才載入在記憶體中。使用完釋放掉。

11樓:陽光的雷咩咩

沒有為什麼,c#就是這樣設計的,用法就是這樣的!只要比爾蓋茨樂意,他可以把這語法顛倒過來。

12樓:匿名使用者

程式設計是個木匠活,靜態類就是你做好的部件,動態類是你腦子裡部件的做法,你得拿一塊木頭把它做出來,這就是建立一個新類

13樓:

因為靜態的類實際上會自動例項化的。

c語言靜態函式的問題,不是c 裡的靜態方法

樓上只說一半,可致電a和b是兩個功能確實使用包括新增a.cpp和b.cpp的main.cpp裡面使用包括實際的相應的 的位置。真的做的專案沒有這樣做,並正在使用的標頭檔案,靜態函式和變數在其他檔案中是完全不可見的,這是錯誤的的地方樓上,即使有出口extern宣告函式不能在編譯的時候沒有通過,將上報的...

C 是一種靜態資料型別檢查的語言。什麼是靜態資料型別檢查

換種說法就是編譯時型別檢查,至於執行時的型別檢查就需要自己處理了 資料型別在編譯時檢查 c語言和c 是不是一個? c 是直接從c語言發展過來的沒錯,但最初這種語言不是叫c 而是c with class,這是由於當時c語言在程式設計界居於老大的地位,要想發展一種新的語言,最強大的競爭對手就是c語言,所...

c 中關於私有靜態變數的問題

include a.h void main a.h如下 class a a static void method private static int a static int b static int c 檔案a.cpp void a method 沒見過有寫 include a.cpp 應該寫成...