通常我們不能在靜態方法內調用非靜態方法。但是如果我們使用一個類實例,那麼我們可以做到以上。一個類實例如何使我們有可能?爲什麼在C#中的靜態方法中通過類實例調用非靜態方法
1
A
回答
7
通常我們不能在靜態方法中調用非靜態方法。
這是一個過分簡化:我們不能通過提供單個方法名稱來調用我們自己類中的非靜態方法,因爲沒有默認的「this」對象。當你寫
SomeMethod(arg1, arg2);
實例方法中,C#將其解釋爲
this.SomeMethod(arg1, arg2);
相同的技巧沒有一個靜態方法裏面工作,因爲靜態方法都以「這個」無法訪問。
但是,如果我們使用類實例,那麼我們可以做到上述。
這是因爲一旦您提供了另一個對象,就沒有必要查找「this」對象。
8
問題很簡單:哪個實例你試圖調用該方法嗎?應該假設哪些本地字段?
對於實例方法,這很簡單:當您調用SomeInstanceMethod()
時,編譯器會添加一個隱含的this.
,因此對這些問題的答案是「當前的」(從技術角度而言,值爲arg0
)。所以當你輸入SomeInstanceMethod()
時,編譯器假設你的意思是this.SomeInstanceMethod()
。
在靜態方法的情況下,不存在可以添加的隱式this
。您仍然可以調用實例方法,但您需要明確指定目標實例。 someObj.SomeInstanceMethod()
將工作得很好。請注意,您也可以使用實例方法中的someObj.SomeInstanceMethod()
在不同實例的上下文中調用該方法。
相關問題
- 1. 非靜態類中的靜態方法和靜態類中的靜態方法有什麼區別?
- 2. 在Dao類中使用靜態方法或非靜態方法?
- 3. 從Python中的靜態方法調用非靜態方法
- 4. 非靜態類中靜態方法的要點是什麼?
- 5. 爲什麼最好從方法的類的實例中靜態地調用靜態方法?
- 6. 在靜態SQLiteDatabase類中調用非靜態方法
- 7. 從非靜態類動態調用非靜態方法的最簡單方法?
- 8. 將靜態方法放入靜態類並將實例方法放入靜態類中有什麼區別?
- 9. 調用靜態類中的非靜態方法 - java
- 10. 爲什麼靜態方法在單例實例中不可用?
- 11. 非靜態方法無法從Android Studio中的非靜態方法調用
- 12. C#,通過靜態方法
- 13. 靜態方法和非靜態方法有什麼區別?
- 14. 通過靜態和非靜態方法訪問靜態屬性?
- 15. 在java中調用非靜態方法
- 16. 從C++中的靜態方法訪問非靜態類變量
- 17. 調用一類的非靜態方法
- 18. 如何從靜態方法調用非靜態方法?
- 19. 爲什麼所有靜態方法/變量都在非靜態類中?
- 20. 從靜態基類方法調用靜態派生類方法
- 21. 在靜態方法中調用非靜態GetType()?
- 22. 非靜態類實例中的c#靜態變量的行爲是什麼?
- 23. 爲什麼實例方法不能覆蓋靜態方法
- 24. 什麼是C#中的「靜態方法」?
- 25. 調用靜態類方法
- 26. 靜態屬性調用WPF中的非靜態方法
- 27. 如何在靜態方法中訪問靜態和非靜態方法
- 28. 在C中調用靜態方法#
- 29. 調用非靜態方法動態
- 30. 目標C - 在類實現中使用非靜態方法