快速的問題,有什麼方法可以調用你的主要方法嗎?還是它必須被稱爲「主()」?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. Obj-C方法命名:設置方法
- 2. 託管C++方法命名
- 3. C++:在main方法中運行函數
- 4. 方法命名
- 5. 在main方法
- 6. main()方法
- 7. main()方法
- 8. Java:調用方法main中的方法
- 9. 致命例外:main java.lang.IllegalStateException:無法執行方法
- 10. 命名Ruby方法
- 11. C# - 重命名目錄的方法
- 12. Objective-C的命名約定方法
- 13. 目標C方法的命名約定
- 14. 命名空間的單一方法,C++
- 15. Jpanel UI main()方法
- 16. 調用方法main方法在Java中
- 17. 命名複雜的方法
- 18. Rails:collection_select的命名方法
- 19. 命名Java庫的方法?
- 20. 命名方法a,b,c等
- 21. C#方法和命名空間問題
- 22. Objective C方法命名約定
- 23. C#方法命名最佳實踐
- 24. 方法main的XML註釋?
- 25. main()方法中的「SIGABRT」
- 26. 當main方法調用方法時,方法是否執行從上到下?
- 27. 方法簽名C++
- 28. C#執行給定方法的方法
- 29. 語法糖方法的命名約定
- 30. 從Main方法運行intellij IDEA插件
這從來沒有從我這裏,只因爲你可以只有一個線在Main()內並從那裏調用任何你想要的。儘管我對答案感興趣.. – 2010-04-09 19:38:48
除了好奇之外,還有其他原因嗎? 有人有這樣的引用:「如果調試比編寫新代碼難兩倍,那麼根據定義,你不夠聰明來調試你能想到的'最聰明'的代碼。」與公約混在一起就屬於這一類。 – 2010-04-09 20:53:49