2
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 上遇到错误说:

错误扩展方法必须是静态的

我该如何处理?

4

2 回答 2

3

因为它是 RichTextBox 上的扩展方法,所以它需要是静态的,也需要在静态类中。

this方法参数中的关键字将其定义为 RichTextBox 上的扩展方法

AppendText(this RichTextBox box.......

来自MSDN - 扩展方法

扩展方法定义为静态方法,但使用实例方法语法调用。它们的第一个参数指定方法操作的类型,参数前面是this修饰符。

来自MSDN - 这个关键字

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);
于 2012-09-01T16:22:20.043 回答
2

this第一个参数之前的关键字用于定义扩展方法

public void AppendText(this RichTextBox box, string text, Color color)
//                     ^^^^

扩展方法必须在静态类中。

删除this关键字使其成为普通方法。

于 2012-09-01T16:23:10.007 回答