2011-10-18 48 views
3

我有類:爲什麼不能調用擴展方法?

class Program 
{ 
    static void Main(string[] args) 
    { 

    } 

    public static int SetFlag_Old(this int i, int flag, bool set = true) 
    { 
     return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i; 

    } 
} 

當我把這個代碼到main方法上面我沒有得到呼叫分機mthod的選項,我無法弄清楚,爲什麼...

int i = 0; 
i. 

即使當我創建一個非靜態方法,並把該代碼我似乎無法調用擴展方法。我錯過了很簡單的事情嗎?

+1

這不會編譯。修復編譯錯誤也修復了您的問題 –

+3

「錯誤CS1106:擴展方法必須在非泛型靜態類中定義」 - 感覺編譯器試圖告訴我一些事情......如果只是它會更具體! –

+0

嗨@馬克,謝謝你的諷刺迴應。其實我沒有意識到它沒有建立,因爲我沒有得到通常的錯誤標籤。我打開了視覺工作室(新機器),我沒有錯誤列表,所以我只看到白色的黑色文字,它看起來'OK'。儘管我真的在笑,但我很欣賞這些迴應。 – Exitos

回答

14

擴展方法必須是在一個靜態類:

public static class IntExtensions 
{ 
    public static int SetFlag_Old(this int i, int flag, bool set = true) 
    { 
     return (set) ? i | flag : ((i & flag) != 0) ? (i - flag) : i; 
    } 
} 

http://msdn.microsoft.com/en-us/library/bb383977.aspx

+0

即使您修復了所有可能未在Intellisense中顯示的問題。只需輸入盲目的整個方法名稱,輸入開頭括號後,智能感知就會顯示參數。 – Oliver

+0

實際上,它不需要在它自己的類中;簡單地說,它必須處於「靜態」類;將'Program'標記爲'static'會達到相同的效果 –

+0

@MarcGravell True,但我認爲最好是在自己的課堂上。儘管我已經更新了我的答案。 –

0

代碼甚至不會編譯。它會給出錯誤Extension method must be defined in a non-generic static class。你需要多少信息?我會重新寫吧:

擴展方法必須在非泛型靜態類

我要補充的是,你可以讓你的Programstatic類定義。考慮到它的「入口」方法(Main)是static我不知道他們爲什麼沒有在代碼模板中直接靜態化它。

0

擴展方法所在的類必須是靜態的。將靜態修改器添加到程序類。

相關問題