将参数从动态更改为对象是否是重大更改?

问题描述

在公共库中有一些具有 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 }