2017-08-06 160 views
0

餵我想爲Char類,它作爲Char.IsDigit()方法(當然這會認識到一個不同的充類型的字符)創建一個擴展方法。 我寫了這個:C#創建擴展方法

namespace CharExtensions 
{ 
    public static class CompilerCharExtension 
    { 
     public static Boolean IsAddOp(this Char c) 
     { 
      return c.Equals('+') || c.Equals('-'); 
     } 
    } 
} 

工作正常,但它的不正是我的意思。 這個擴展應該這樣使用:

using CharExtensions; 
char x: 
... 
if(x.IsAddOp()) 
    Console.WriteLine("Add op found"); 

雖然我是這樣的:

using CharExtensions; 
char x; 
... 
if(Char.IsAddOp(x)) 
    Console.WriteLine("Add op found"); 

謝謝大家誰可以幫助我。

+0

你不能這樣做,如果你能做到這將是非常糟糕的做法。你爲什麼想這麼做?只需製作一個普通的方法並像這樣調用它:'IsAddOp(x)'。 – DavidG

+0

@DavidG _Just make一個正常的方法_是好的,但如果可以定義擴展方法,更好地使用它的開發人員 –

+0

@combo_ci以什麼方式擴展到'char'更好? – DavidG

回答

3

你不能那樣做,因爲擴展方法總是需要對象的一個​​實例。 參見here

擴展方法被定義爲靜態方法,但通過使用實例方法語法被調用。

+0

從技術上講,他們不需要一個實例。他們只需要一個正確類型的變量;無論是否爲'null'與調用方法無關(儘管大多數擴展方法都需要它)。 – Joey

+1

@Joey技術上你也不需要變量。你只需要一個正確的編譯時類型的表達式。例如'((IEnumerable的)空)。首先();' –

0

你的問題提到要激發一個類的靜態方法。您實際上想要爲Char類定義靜態方法,而不是爲char實例添加擴展。定義你必須訪問原始類的東西like

class SomeClass { 
    public int InstanceMethod() { return 1; } 
    public static int StaticMethod() { return 42; } 
} 

現在你可以使用StaticMethod作爲一個靜態方法:

SomeClass.StaticMethod(); 

然後,你必須訪問微軟.NET框架的代碼IsAddOp(x)方法添加到Char類。事實上,你用這種方式來定義擴展名的方式是錯誤的..你不試圖定義Extension方法..你試圖定義Static方法。

+0

這不是我的意思。 – weirdgyn