c#扩展方法和动态调用:限制
>c#扩展方法提供了一种强大的方法,可以在不更改其原始代码的情况下向现有类型添加功能。 这些方法使用熟悉的点表示法调用。 例如:
<code class="language-csharp">List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 }; Console.WriteLine(numbers.First()); // Uses the LINQ extension method First()</code>
但是,尝试在dynamic
对象上调用扩展方法时出现了一个限制:
<code class="language-csharp">dynamic dynamicNumbers = numbers; Console.WriteLine(dynamicNumbers.First()); // Throws a RuntimeBinderException</code>
此代码失败,因为C#编译器依赖于静态分析来在编译时找到扩展方法。 使用dynamic
>对象,由于对象的类型仅在运行时已知,因此无法进行此静态分析。 动态语言运行时(DLR)将需要对适当的扩展方法进行复杂的运行时搜索,考虑到名称空间和using
指令,这是一个被认为太复杂且可能容易实现的任务。
因此,c#中不支持dynamic
对象施放到其混凝土类型上。dynamic
>
以上是C#中可以动态调用扩展方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!