我想知道我是否可以使用扩展方法或其他技术扩展静态类
System.Net.Mime.MediaTypeNames.Image
,它的类型比我需要的少。
答案 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
参数接收,并且可以简单地使用原始类的静态方法。