快速的問題,有什麼方法可以調用你的主要方法嗎?還是它必須被稱爲「主()」?C#自行命名Main()方法的方法?
回答
注意這是一個C#約定,而不是.NET運行時約定。你能說出你的方法無論你想在IL:
.module Mane.exe
.subsystem 3
.corflags 9
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
.ver 2:0:0:0
}
.assembly Mane
{
.custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = (01 00 00 00 00)
.custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = (01 00 01 00 00)
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = (01 00 07 31 2E 30 2E 30 2E 30 00 00)
.custom instance void [mscorlib]System.Resources.NeutralResourcesLanguageAttribute::.ctor(string) = (01 00 05 65 6E 2D 55 53 00 00)
.permissionset reqmin
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'Execution' = bool(true)}}
.hash algorithm 0x00008004
.ver 1:0:0:0
}
.namespace Mane
{
.class private abstract auto ansi sealed beforefieldinit Program extends [mscorlib]System.Object
{
.method private hidebysig static void Mane() cil managed
{
.entrypoint
.maxstack 1
ldstr "Hello, World!"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}
}
謝謝偉大的答案。非常有趣 – Chilln 2010-04-09 20:08:03
非常歡迎您,感謝您的榮譽。作爲事後考慮,我想知道像PostSharp這樣的工具是否可以將IL(.entrypoint)的適當部分注入到用特定屬性修飾的方法中,從而避免需要命名爲Main的入口點的C#「限制」 ()。 – 2010-04-09 20:10:35
不,它必須被稱爲Main。 See Main() and Command Line Arguments (C# Programming Guide)。
@Kevin:最好提供沒有版本號的MSDN鏈接,除非答案是版本特定的。 – 2010-04-09 20:00:46
@John謝謝,複製鏈接時我總是犯這個錯誤。 – kemiller2002 2010-04-09 20:03:14
它必須被稱爲Main()。
顯然這是C#約定,而不是.NET Framework約定。 – 2010-04-09 20:01:23
@Justin:你知道你提供了一個.NET 1.1的鏈接嗎?我已經修復它沒有版本號。 – 2010-04-09 20:01:44
它被稱爲主。
如果您真的想要,您可以創建自己的方法,並將其稱爲Main中唯一的代碼行。
public static void Main(String[] args)
{
Mane(args);
}
是否有任何理由讓主要公衆? MSDN表示它不應該公開... – IVlad 2010-04-09 19:43:41
不是......主要是標準的。你可以做的是從項目屬性的「啓動對象」設置中更改託管Main方法的類
但是,真的,爲什麼你想要?大家都知道,它的主要...這樣你會迷惑其他開發人員可以看看你的代碼
從「Main() and Other Methods (C# vs Java)」:
每一個C#應用程序必須包含一個主要方法,其中指定的程序執行即將開始。
@brydgesk:請嘗試提供MSDN鏈接,而不要在其中包含版本號。他們將永遠是最新的。 – 2010-04-09 20:04:11
你可以調用你的main方法,但它不會被稱爲應用程序中的第一種方法,除非它被稱爲Main
。還有其他一些要求和要注意的事項。從MSDN:
- Main方法是程序的入口點,程序控制開始和結束。
- 它是在類或結構中聲明的。它必須是靜態的,不應該公開。
- 它可以有一個void或int返回類型。
- Main方法可以用或不用參數聲明。
- 可以將參數讀爲零索引的命令行參數。
- 與C和C++不同,程序的名稱不被視爲第一個命令行參數。
@Mark:最好提供沒有版本號的MSDN鏈接,因爲它們將始終引用當前版本。 – 2010-04-09 20:05:31
我不相信有辦法做到這一點對事物的C#的一面,但如果你願意編輯您的IL很容易足以進入IL中並添加.entrypoint函數。查看wikipedia上的CLI條目。
- 1. 託管C++方法命名
- 2. 在main方法
- 3. main()方法
- 4. Jpanel UI main()方法
- 5. 命名空間的單一方法,C++
- 6. 命名Java庫的方法?
- 7. 命名複雜的方法
- 8. C#方法命名最佳實踐
- 9. 命名方法a,b,c等
- 10. C#方法和命名空間問題
- 11. 當main方法調用方法時,方法是否執行從上到下?
- 12. C#執行給定方法的方法
- 13. 語法糖方法的命名約定
- 14. 來自行號的方法名稱
- 15. 重命名名稱空間後找不到爲Main方法指定的'WindowsFormsApplication1.Program'
- 16. 方法命名約定
- 17. 命名方法:send_auto_reply()vs send_autoreply()
- 18. 動態方法命名
- 19. 命名方法提示
- 20. 關於在main方法
- 21. 如何記錄Main方法?
- 22. 在哪種情況下,C++/c#命名空間方法比Java方法更好?
- 23. main方法中使用的方法是否需要自己的類?
- 24. 在main方法中獲取異常的主要方法中的靜態鍵名「main」java.lang.NoSuchMethodError:main
- 25. 無法在Main()中調用方法?
- 26. 如何調用main方法的方法從不同的類
- 27. 從main方法調用void方法,無法在void方法中傳遞參數
- 28. 以編程方式重命名或排除C#類和方法
- 29. 誰叫在C#中的main()方法? Main()方法中的異常情況下如何退出應用程序?
- 30. 用正確的方法來努力來命名這個方法
這從來沒有從我這裏,只因爲你可以只有一個線在Main()內並從那裏調用任何你想要的。儘管我對答案感興趣.. – 2010-04-09 19:38:48
除了好奇之外,還有其他原因嗎? 有人有這樣的引用:「如果調試比編寫新代碼難兩倍,那麼根據定義,你不夠聰明來調試你能想到的'最聰明'的代碼。」與公約混在一起就屬於這一類。 – 2010-04-09 20:53:49