扩展方法不起作用,如果方法在非静态类中?

Pra*_*pan 0 c#

刚才我读到了扩展方法.我在静态类中创建了静态方法,它的工作正常.

    static class ExtensionMethods
    {
        public static string splitFirstName(this string strName)
        {
            return strName.Split(" ".ToCharArray())[0];
        }
     }
Run Code Online (Sandbox Code Playgroud)

但是如果我在Nonstatic类中创建静态方法它不起作用.

    class NonStaticCls
    {
      public static string splitFirstName(this string strName)
      {
        return strName.Split(" ".ToCharArray())[0];
      }
    }
Run Code Online (Sandbox Code Playgroud)

请告诉我为什么它不在非静态课堂上工作.

Jon*_*eet 6

请告诉我为什么它不在非静态课堂上工作.

因为这就是指定扩展方法的方式.它们必须在非嵌套的非泛型类中声明.

从C#5规范的第10.6.9节:

当方法的第一个参数包含this修饰符时,该方法被称为扩展方法.扩展方法只能在非泛型的非嵌套静态类中声明.扩展方法的第一个参数除此之外不能有任何修饰符,参数类型不能是指针类型.

为什么在非静态类中声明它?你想要实现什么,使用静态类无法实现?(我也只是约想象一些可能性,但他们没有事情,我曾经想在扩展方法做我自己......)