C#:将扩展方法添加到基类,以便它们出现在派生类中

Mif*_*Fox 9 c# intellisense extension-methods

我目前在System.Windows.Forms.Control上有一个扩展方法,如下所示:

public static void ExampleMethod(this Control ctrl){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但是,此方法不会出现在从Control派生的类中,例如PictureBox.我是否可以创建一个不仅出现在Control中的扩展方法,而且对于从Control派生的类,而不必进行显式转换?

Shu*_*oUk 15

必须为定义扩展类的命名空间包含using语句,否则扩展方法不在范围内.

扩展方法适用于派生类型(例如IEnumerable<T>,System.Linq中定义的扩展方法).


Nat*_*ari 8

扩展方法实际上将应用于正在扩展的类型的所有继承者/实现者(在本例中为Control).您可以尝试检查using语句,以确保在您尝试调用它的位置引用扩展方法所在的命名空间.


Jon*_*ker 5

请注意,如果您从类中的属性调用扩展方法,该类继承自应用了扩展方法的基类,则必须为扩展方法添加后缀this

例如

public int Value
{
    get => this.GetValue<int>(ValueProperty);
    set => SetValue(ValueProperty, value);
}
Run Code Online (Sandbox Code Playgroud)

GetValue我的扩展方法在哪里应用于基类。