C#中重载函数的执行顺序
Posted
技术标签:
【中文标题】C#中重载函数的执行顺序【英文标题】:Execution Order Of Overloaded Functions in C# 【发布时间】:2014-10-21 20:28:19 【问题描述】:只是想知道 C# 如何确定方法重载中对象的执行顺序 例如我有一个方法
bool SomeMethod(IQueryable source)
//.... Do Work
bool SomeMethod(IEnumerable source)
//.... Do Work
var Obj = Db.Table.Where(ID > 5);
SomeMethod(Obj);
当我运行此代码时,代码会转到 IQueryable 重载,现在是因为我首先声明了 IQueryable,是因为 IQueryable 是 IEnumerable 类型还是有其他根本原因?
-谢谢
【问题讨论】:
【参考方案1】:有一个更好的算法(C# 规范的第 7.4.3 节)用于决定在有多个适用的重载的情况下使用哪个方法重载。在这种情况下,IQueryable
可以隐式转换为IEnumerable
,但IEnumerable
不能隐式转换为IQueryable
,从而使IQueryable
成为“更好”的重载。
另见7.4.2.3 Better conversion
【讨论】:
【参考方案2】:.NET 编译器一直在寻找最具体的重载。假设您有一个接受单个参数的简单函数,其中包含对象和字符串参数的重载。如果你传递一个字符串,字符串是一个对象,但字符串重载更具体,所以它会被调用。对于复杂的函数签名和许多重载,有时您会收到“不是最具体的”编译器错误。另见:
Overload resolution failed because no accessible 'method' is most specific for these arguments:error【讨论】:
以上是关于C#中重载函数的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章
我可以从 C# 中同一类的另一个构造函数调用重载构造函数吗?