将参数从动态更改为对象是一项重大更改吗?
Is changing a parameter from dynamic to object a breaking change?
在 public 库中有一些 public 方法具有 dynamic
参数,例如
public void DoSomething(dynamic date)
这些参数实际上不需要是动态的,所以我想将它们更改为 'object'
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();
在不重新编译控制台应用程序的情况下,我将 'object' 版本的 dll 复制到控制台文件夹,它运行时没有错误打印
object:{ Text = Hallo }
在 public 库中有一些 public 方法具有 dynamic
参数,例如
public void DoSomething(dynamic date)
这些参数实际上不需要是动态的,所以我想将它们更改为 'object'
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();
在不重新编译控制台应用程序的情况下,我将 'object' 版本的 dll 复制到控制台文件夹,它运行时没有错误打印
object:{ Text = Hallo }