【发布时间】:2014-03-25 12:37:05
【问题描述】:
是否可以创建不带参数的扩展方法?我是使用扩展方法的新手,只见过使用参数的方法。
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*/}
(如果是这种情况,那么这也意味着扩展方法中的第一个参数必须接受它正在扩展的类的实例,所以我可能错了。)
【问题讨论】:
-
你为什么想要一个无参数的扩展方法?那么它会扩展什么?
-
我认为它会像标准库中不带参数的任何方法一样运行,例如 Console.Read()。这个问题意味着您可以定义一个没有参数的扩展方法,并且(理论上)将其称为 Console.MyExt();但我发现事实并非如此。
-
@Stopforgettingmyaccounts... 注意扩展方法需要一个instance,但是
Console是一个类,所以你不能写一个扩展方法用作静态方法,如Console.MyExt()。见Can I add extension methods to an existing static class? -
如果类是静态的,那将毫无意义。
标签: c# extension-methods