2017-08-06 120 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