我正在学习C#和C,这个C#代码给了我一个我不明白的错误。我正在阅读有关扩展方法的内容,这段代码给出了错误:方法'WriteTextToConsole'没有重载需要1个参数。如您所见,它只需要1个参数?我创建变量c和count只是为了能够构造字符串对象。所以我可以在String类中尝试扩展。是否正确理解您创建扩展方法的方式:是在参数前面加上“this”关键字,参数是要扩展的类的类型?
代码在这里:
Console.WriteLine();
M.WriteTextToConsole("Hello, world. Programming in C# is fun");
char c = 'A';
int count = 14;
String str = new String(c, count);
str.WriteTextToConsole("This is a string");
方法在这里:
static class M
{
public static void WriteTextToConsole(this string text)
{
Console.WriteLine(text);
}
}
答案 0 :(得分:7)
您需要将其称为str.WriteTextToConsole();
。在这种情况下,str
将作为单个参数传递给M.WriteTextToConsole()
方法
答案 1 :(得分:1)
当你在字符串上调用扩展方法时,“this string text”参数引用字符串本身,例如,如果它是“this Bitmap b”,那么它将是位图的扩展方法并假设你创建了一个名为bit
的位图对象,调用将是bit.WriteTextToConsole()
。如果您想要其他参数,您需要将这些参数添加到方法声明中,并且这样做是调用者的一个选项。 params关键字如此:
static class M
{
public static void WriteTextToConsole(this string text,params string[] str)
{
if (str.Length > 0)
{
//do something with extra string or strings
//you can make params Object[] but for this
//example i choose string[]
Console.WriteLine(text);
return;
}
Console.WriteLine(text);
}
}
请注意,this
关键字必须是第一个参数,请参阅您要扩展的类型。
在有可选字符串的情况下,我将代码保留为重复的console.WriteLine(text),如果你在两种情况下想要在控制台中显示字符串(只需删除它上面的return和console writeline),你就可以重写它。