。Net中使用动力学重载方法

问题描述 投票:0回答:1

我对某事的“为什么”有些困惑,在进行部署之前,我想澄清一下。

我有一个DAL库,该库实际上将所有对数据的调用集中到两个函数。它实际上是一个函数,但是我编写了一个重载以接受数据对象,将其转换为ExpandoObject,然后将查询参数构建为KeyValuePairs<string, dynamic>以满足原始功能。

public static IEnumerable<T> ResultSet<T>(string conn, string query, params KeyValuePair<string, dynamic>[] pmts)...

public static IEnumerable<T> ResultSet<T>(string conn, string query, dynamic dao)…

我的问题是这个;为什么这是有效的过载? params关键字是否可以防止歧义问题?因为我使用的是dynamic,并且一切都在测试中运行良好,所以我觉得我应该更好地理解为什么这是允许的过载,然后再投入生产(否则它会爆炸)。

c# dynamic polymorphism parameter-passing overloading
1个回答
0
投票

有效的重载是定义不同的所有内容,表示不完全相同。就是这种情况。重载的定义中没有更多的检查。

解决可能的歧义发生在使用现场,即所拨打的电话。总是可以用这种方式明确键入每个参数并选择所需的重载。

如果需要进行任何类型的转换并且暗含可能,则编译器将尝试查找“更好的转换”。尽可能少的数据丢失总会更好。

[只有通过此选择,您最终会导致应用了等排名转换的多个重载,在调用位置会出现歧义错误。

如果您致电

ResultSet<object>("connection", "query", new KeyValuePair<string, dynamic>("test", null));

您将最终使用第一个重载,因为没有必要进行转换。没有转换比转换更好。

© www.soinside.com 2019 - 2024. All rights reserved.