gpt4 book ai didi

c# - 为什么这个函数必须是静态的?

转载 作者:行者123 更新时间:2023-12-02 22:31:06 26 4
gpt4 key购买 nike

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 上说:

Error Extension method must be defined in a non-generic static class

如果我从函数中删除静态变量,我会在 AppendText 上收到错误消息:

Error Extension method must be static

我该如何使用它?

最佳答案

因为它是一个 extension method在 RichTextBox 上,它需要是静态的,也需要在静态类中。

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

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

来自 MSDN - Extension Methods

Extension methods are defined as static methods but are called by using instance method syntax.Their first parameter specifies which type the method operates on, and the parameter is preceded by the this modifier.

来自 MSDN - this keyword

The this keyword refers to the current instance of the class and is also used as a modifier of the first parameter of an extension method.

如果你想在 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);

关于c# - 为什么这个函数必须是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com