2017-04-14 49 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看到的,这些方法确实有主体。