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 に答える