扩展静态类的扩展方法

时间:2010-11-19 01:33:42

标签: c# .net

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

2 个答案:

答案 0 :(得分:7)

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

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

这实际上编译为:

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

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

答案 1 :(得分:0)

不,这在C#中尚不可能,但希望它在某些时候会变得如此。并且您不能通过这种方式对静态类进行子类化并添加新方法,因为静态类必须从object派生。但是你可以做的一件事就是在代码中产生非常相似的效果,只需要声明另一个静态类,当你需要扩展方法时,你将使用它。例如:

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参数接收,并且可以简单地使用原始类的静态方法。

相关问题