public void AppendText(this RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
}
是public static void
但是我在Form1中的这一行有一个错误:
public partial class Form1 : Form
错误在Form1上说:
错误扩展方法必须在非泛型静态类中定义
如果我从函数中删除静态,我会在AppendText上获取错误:
错误扩展方法必须是静态的
我如何使用它?
答案 0 :(得分:3)
因为它在RichTextBox上是extension method,所以它需要是静态的,也需要在静态类中。
方法参数中的 this
关键字将其定义为RichTextBox
AppendText(this RichTextBox box.......
扩展方法被定义为静态方法,但是被调用 使用实例方法语法。它的第一个参数指定方法操作的类型,参数前面是 this 修饰符。
this关键字引用类的当前实例,并且是 也用作扩展名的第一个参数的修饰符 方法强>
如果要在RichTextBox上创建扩展方法,则必须将此方法定义为静态,并将其置于静态非泛型类中,如:
public static class MyExtensions
{
public static void AppendText(this RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
}
}
以后你可以这样称呼:
RichTextBox yourRichTextBox = new RichTextBox();
yourRichTextBox.AppendText("Some Text",Color.Blue);
答案 1 :(得分:2)
第一个参数之前this
关键字的存在是defining extension methods。
public void AppendText(this RichTextBox box, string text, Color color)
// ^^^^
扩展方法必须在静态类中。
删除this
关键字,使其成为普通方法。