我想知道如果我可以使用扩展方法或其他技术来扩展静态类如 System.Net.Mime.MediaTypeNames.Image
,它的类型比我需要的少。扩展方法扩展静态类
5
A
回答
6
不,扩展方法只能用于添加实例方法,而不能用于静态方法(甚至属性)。扩展方法实际上只是静态方法中的句法糖。例如,当您使用的扩展方法如Count():
var list = GetList();
var size = list.Count();
这实际上编译:
var list = GetList();
var size = Enumerable.Count(list);
使用扩展方法不能添加额外的静态方法向现有类。
+0
说“扩展方法只能用于添加实例方法”是否正确?正如你所解释的那样,它们只是表现为实例方法。它们实际上不是实例方法,或者您将能够访问该类的非公共成员。 – 2014-07-27 23:01:38
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
参数,并且可以简单地使用原始类的静态方法。
相关问题
- 1. 扩展方法vs静态工具类
- 2. 静态方法与类扩展android.app.Application?
- 3. 扩展类和静态值
- 4. 扩展类成员的扩展方法?
- 5. 使用扩展方法的扩展类
- 6. 扩展类方法
- 7. 静态和扩展方法策略
- 8. 静态业务层和扩展方法
- 9. PHP Zend Engine扩展和静态方法
- 10. 扩展方法的静态类的方法
- 11. 扩展BaseClass方法(多态)
- 12. 更改基于扩展类的父类方法行为(静态)
- 13. 嵌套在静态类中的类中的扩展方法
- 14. 扩展方法
- 15. 扩展方法
- 16. 为什么我无法为静态类创建扩展方法?
- 17. 静态扩展访问
- 18. 扩展或静态功能?
- 19. 动态类扩展
- 20. 扩展嵌套类方法
- 21. 扩展基类方法
- 22. 可扩展枚举的扩展方法
- 23. PHP - 扩展静态属性/子类
- 24. 委托静态成员扩展类 - Java
- 25. 如何在C#中扩展静态类#
- 26. Java类上的静态扩展函数
- 27. php5扩展主类并使用静态
- 28. 扩展扩展类型
- 29. 扩展扩展类Zend_Db_Table_Row_Abstract
- 30. 从扩展运行方法扩展运行扩展运行
您不能扩展静态类;搜索这个问题的重复,你会看到一些解决方法。 – BeemerGuy 2010-11-19 01:39:40
你为什么要这样做?静态类没有上下文,任何你可以在静态类内部的任何地方都可以在代码中的“任何地方”完成。 – 2010-11-19 07:42:44
@Amby - 我想你可能只是想为组织采购做点什么。当然,你可以用必要的方法创建一个静态的ImageUtility类(根据这个答案,他将不得不做任何事情),但我认为OP希望以他不需要额外类的方式组织他的代码。不幸的是,你不能。 (我来这里期望做同样的事情)。 – MattW 2012-08-06 13:52:20