c#无参数扩展方法

时间:2014-02-24 02:17:13

标签: c# extension-methods

是否可以创建一个不带参数的扩展方法?我是新手使用扩展方法,并且只使用参数看过它们。

来自RB Whitaker's C# tutorial

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

  

“他们的第一个参数指定方法操作的类型,参数前面是 this 修饰符。”

这两个,特别是每个站点上的代码示例(这里只发布一个)似乎表明扩展方法必须至少有一个参数,因为该参数用于附加 this 关键字to,允许该方法注册为其后面的类或类型的扩展名。例如,

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

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

1 个答案:

答案 0 :(得分:7)

这是对的。扩展方法至少需要一个参数,用this修饰符标记。

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

"foo".StringExtension();

相当于:

StringExtensions.StringExtension("foo");

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