我想知道如果我可以使用擴展方法或其他技術來擴展靜態類如 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. 靜態方法與類擴展android.app.Application?
- 2. 擴展方法vs靜態工具類
- 3. 擴展類和靜態值
- 4. 擴展類成員的擴展方法?
- 5. 使用擴展方法的擴展類
- 6. 擴展類方法
- 7. 靜態業務層和擴展方法
- 8. PHP Zend Engine擴展和靜態方法
- 9. 擴展方法的靜態類的方法
- 10. 更改基於擴展類的父類方法行爲(靜態)
- 11. 擴展方法
- 12. 爲什麼我無法爲靜態類創建擴展方法?
- 13. 擴展或靜態功能?
- 14. 動態類擴展
- 15. 擴展基類方法
- 16. 擴展嵌套類方法
- 17. php5擴展主類並使用靜態
- 18. 如何在C#中擴展靜態類#
- 19. 擴展擴展類型
- 20. 擴展擴展類Zend_Db_Table_Row_Abstract
- 21. 從擴展運行方法擴展運行擴展運行
- 22. AutoMapper展開擴展方法
- 23. 擴展方法必須在非泛型靜態類
- 24. 擴展方法必須在非泛型靜態類
- 25. 在靜態中使用擴展類方法
- 26. c#擴展字符串類與靜態方法
- 27. 嵌套靜態類中不允許使用擴展方法嗎?
- 28. PHP ::如何從擴展類調用靜態方法(或屬性)?
- 29. TypeScript聲明擴展類與靜態方法。
- 30. Java - 非靜態類的擴展靜態類
您不能擴展靜態類;搜索這個問題的重複,你會看到一些解決方法。 – BeemerGuy 2010-11-19 01:39:40
你爲什麼要這樣做?靜態類沒有上下文,任何你可以在靜態類內部的任何地方都可以在代碼中的「任何地方」完成。 – 2010-11-19 07:42:44
@Amby - 我想你可能只是想爲組織採購做點什麼。當然,你可以用必要的方法創建一個靜態的ImageUtility類(根據這個答案,他將不得不做任何事情),但我認爲OP希望以他不需要額外類的方式組織他的代碼。不幸的是,你不能。 (我來這裏期望做同樣的事情)。 – MattW 2012-08-06 13:52:20