2016-12-14 127 views

回答

7

通常我們不能在靜態方法中調用非靜態方法。

這是一個過分簡化:我們不能通過提供單個方法名稱來調用我們自己類中的非靜態方法,因爲沒有默認的「this」對象。當你寫

SomeMethod(arg1, arg2); 

實例方法中,C#將其解釋爲

this.SomeMethod(arg1, arg2); 

相同的技巧沒有一個靜態方法裏面工作,因爲靜態方法都以「這個」無法訪問。

但是,如果我們使用類實例,那麼我們可以做到上述。

這是因爲一旦您提供了另一個對象,就沒有必要查找「this」對象。

8

問題很簡單:哪個實例你試圖調用該方法嗎?應該假設哪些本地字段?

對於實例方法,這很簡單:當您調用SomeInstanceMethod()時,編譯器會添加一個隱含的this.,因此對這些問題的答案是「當前的」(從技術角度而言,值爲arg0)。所以當你輸入SomeInstanceMethod()時,編譯器假設你的意思是this.SomeInstanceMethod()

在靜態方法的情況下,不存在可以添加的隱式this。您仍然可以調用實例方法,但您需要明確指定目標實例。 someObj.SomeInstanceMethod()將工作得很好。請注意,您也可以使用實例方法中的someObj.SomeInstanceMethod()在不同實例的上下文中調用該方法。

相關問題