2017-04-14 48 views
2

我是新的C#和我將工作的代碼庫中遇到這樣的東西的方法(這些具體的例子來自Microsoft.Extensions.CommandLineUtils)。C#,沒有身體

public CommandArgument Argument(string name, string description, Action<CommandArgument> configuration, bool multipleValues = false); 
public CommandArgument Argument(string name, string description, bool multipleValues = false); 

我真的只想知道這個構造是什麼調用的,當你調用這些函數時會發生什麼?我猜他們是一些編譯時魔術的代理,但不確定。

+4

請鏈接到完整的代碼。公開使它不是一個接口的一部分,不抽象使它不可能沒有實現 –

+1

你的問題還不清楚。您發佈的代碼不是合法的C♯,它實際上並未出現在[Microsoft.Extensions.CommandLineUtils'任意位置的源代碼中](https://github.com/aspnet/Common/blob/dev/shared/ Microsoft.Extensions.CommandLineUtils.Sources /的CommandLine/CommandLineApplication.cs#L95-L114)。 –

+0

這是@Lanorkin回答 - 實際上是查看外部DLL的元信息 感謝源鏈接 – opalfroot

回答

5

這不是一個有效的C#代碼。

很可能您在VS.Net中單擊了「轉到定義」/ F12,並向您顯示了外部DLL的元數據。

+0

這正是發生了什麼事。我想知道班上正在做什麼,並提出各種奇怪的東西。 所以,當你說外部DLL - 這是否意味着我不能偷看這是如何工作? 如果我想看看我怎麼Microsoft.Extensions.CommandLineUtils作品無法查看源代碼(概率完全愚蠢的問題 - 但我走的時候和Python的未來在那裏它可以查看源代碼)。 – opalfroot

+1

@opalfroot不,你不能。如果您有任何問題,您必須反編譯DLL或引用源。 Resharper插件(不是免費的)可以在Visual Studio中爲你動態地反編譯。或者你可以使用dotPeek(免費)用於相同的目的,但在VS – Lanorkin

+0

之外對於某些操作系統的東西,正如其他人所示,我可以在GitHub上查看代碼,但正如你所說的其他所有東西都有反編譯工具等。 再次感謝! – opalfroot

0

我懷疑你所看到的是Visual Studio生成的元數據生成的代碼(你會在標籤的標題中看到「從元數據生成」)。這段代碼實際上並沒有編譯 - 只是爲了告訴你方法簽名是什麼樣的。

正如你可以從the actual code看到的,這些方法確實有主體。