问题描述
在公共库中有一些具有 dynamic
参数的公共方法,例如
public void DoSomething(dynamic date)
这些参数实际上不需要是动态的,所以我想将它们更改为“对象”
public void DoSomething(object date)
有什么方法可以将(输入)参数从动态更改为对象可能会破坏使用此 api 的现有代码?
编辑:这个问题是专门关于在将参数的类型从动态更改为对象时破坏 API 的现有使用者,而不是关于两者之间差异的一般问题。
解决方法
我做了一点测试,我的结论是,即使不重新编译客户端,客户端代码也不会因为仅将动态参数更改为对象而中断。
我用这个方法写了一个 .Net 库项目
public static string DoSomething(dynamic date) => "Dynamic:" + date.ToString();
在控制台应用程序中,我用
Console.WriteLine(TestClass.DoSomething(new { Text = "Hallo" }));
并打印 Dynamic:{ Text = Hallo }
然后我把库里的代码改成
public static string DoSomething(object date) => "object:" + date.ToString();
在没有重新编译控制台应用程序的情况下,我将 dll 的“对象”版本复制到控制台文件夹,并且它运行时没有错误打印
object:{ Text = Hallo }