使用 Dynamic 是一种不好的做法吗?
考虑以下 C# 代码:
MyClass myInstance = new MyClass(); dynamic mydynamicInstance = myInstance; //This method takes a MyClass argument and does something. Caller.InvokeMethod(myDynamicInstance);
在此在这种情况下,调用带有动态参数的方法可以确定运行时类型。虽然这看起来很方便,但它存在潜在的缺点。
为什么要避免动态?
dynamic 关键字启用后期类型绑定,这意味着系统仅在执行期间检查类型而不是编译。这将错误检测的责任交给了用户,他们可能会遇到意外的异常或不正确的行为。
动态的替代方案
根据具体的用例,有使用动态的几种替代方法:
未知方法调用的动态替代
如果方法是调用在编译时未知,请考虑以下内容技术:
性能注意事项
基准测试结果表明 MethodInfo.CreateDelegate 和 DynamicMethod 相对较快,而 Keyworddynamic 和 MethodInfo.Invoke 性能开销较大。
结论
虽然动态可以提供便利,但它牺牲了类型安全性并可能导致潜在的错误。在大多数情况下,最好使用提供编译时类型检查和更好性能的替代方法。应谨慎使用动态,例如在互操作场景或有明显优势时。
以上是什么时候应该避免在 C# 中使用'dynamic”?的详细内容。更多信息请关注PHP中文网其他相关文章!