c#无参数扩展方法

c# parameterless extension method

本问题已经有最佳答案,请猛点这里访问。

是否可以创建不带参数的扩展方法?我刚开始使用扩展方法,只看到它们使用参数。

来自Rb Whitaker的C教程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static class StringExtensions
{
    private static Random random = new Random();

    public static string ToRandomCase(this string text)
    {
        string result ="";

        for (int index = 0; index < text.Length; index++)
        {
            if (random.Next(2) == 0)
            {
                result += text.Substring(index, 1).ToUpper();
            }
            else
            {
                result += text.Substring(index, 1).ToLower();
            }                
        }

        return result;
    }
}

以及来自msdn的:

"Their first parameter specifies which type the method operates on, and the parameter is preceded by the this modifier."

这两种方法,尤其是每个站点上的代码示例(此处只发布一个),似乎都表明扩展方法必须至少有一个参数,因为该参数用于将此关键字附加到,从而允许该方法注册为紧随其后的类或类型的扩展。例如,

1
public static StringExtension(this String a) {/*stuff*/}

(如果是这种情况,那么这也意味着扩展方法中的第一个参数必须接受它正在扩展的类的实例,因此我可能是错误的。)


没错。扩展方法需要至少一个参数,用this修饰符标记。

但是,当使用对要扩展的类的引用调用扩展方法时,您不会指定参数:

1
"foo".StringExtension();

相当于:

1
StringExtensions.StringExtension("foo");

即使您实际上没有在方法中使用参数,也必须声明它以便使用扩展方法提供的语法。