C#创建扩展方法

时间:2017-08-06 09:55:31

标签: c# char

你好我想为Char类创建一个扩展方法,作为Char.IsDigit()方法(但当然会识别不同类型的字符)。 我写了这个:

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");

感谢所有能帮助我的人。

2 个答案:

答案 0 :(得分:3)

您不能这样做,因为扩展方法总是需要对象的实例。 见here

  

扩展方法被定义为静态方法,但是使用实例方法语法调用。

答案 1 :(得分:0)

你的问题提到了一个类的静态方法。您实际上想要为Char类定义静态方法,而不是向char实例添加扩展名。要定义静态方法,您必须访问原始类like

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

现在您可以将StaticMethod用作:

SomeClass.StaticMethod();  

然后,您必须访问Microsoft .net框架代码才能将IsAddOp(x)方法添加到Char类。实际上你用你所说的那个定义扩展的方法是错误的..你不要试图定义Extension方法..你试着定义Static方法。