关于c#:扩展静态类的扩展方法

extension method to extend static class

本问题已经有最佳答案,请猛点这里访问。

我想知道是否可以使用扩展方法或其他技术来扩展静态类System.Net.Mime.MediaTypeNames.Image,它的类型比我需要的少。


不可以,扩展方法只能用于添加实例方法,而不能用于静态方法(甚至是属性)。扩展方法实际上只是围绕静态方法的语法甜头。例如,当您使用扩展方法(如count())时:

1
2
var list = GetList();
var size = list.Count();

这实际上是编译为:

1
2
var list = GetList();
var size = Enumerable.Count(list);

不能使用扩展方法向现有类添加其他静态方法。


不,这在C中还不可能实现,不过希望在某个时候会变成这样。您不能这样子类静态类并添加新方法,因为静态类必须从object派生。但是,您可以做的一件事是,在代码中产生类似的效果,只需声明另一个静态类,当您需要扩展方法时,可以使用它来代替。例如:

1
2
3
4
5
6
7
public static class MessageBox2
{
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
    {
        return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

由于原始类是静态的,根据定义,"扩展"方法不需要接收作为this参数的实例,并且可以简单地使用原始类的静态方法。