【发布时间】:2011-11-05 01:03:52
【问题描述】:
我读过几篇文章说,随着在 C# 3.0 中引入命名参数,参数名称现在成为公共合同的一部分。 这是真的吗,这到底是什么意思?我运行了一个简单的测试,更改 MyLib.dll 中的参数名称并没有破坏 MyApp.exe,它使用具有原始名称的命名参数调用该方法,我认为是因为 C# 编译器在编译时做了重载解析,而生成的 IL 对参数名称一无所知。这是反汇编代码在 Reflector 上的样子:
private static void Main()
{
bool CS$0$0000 = true;
Class1.DoSomething(CS$0$0000);
Console.ReadKey();
}
...这是原始源代码:
static void Main() {
MyLib.Class1.DoSomething(a: true);
Console.ReadKey();
}
【问题讨论】:
-
是的,你明白这一点,它并没有破坏。想出一个破坏的场景很困难,我不能轻易想出一个后期绑定的场景。