C# 方法重载。编译器如何决定使用哪个?
我有两种方法C# 方法重载。编译器如何决定使用哪个?,c#,logging,C#,Logging,我有两种方法 1. public void Log(object tolog, string Instance) 2. public void Log(params object[] tolog) 我这样调用Log,其中tolog1是一个对象 Log(tolog1,"Hello") 我不明白为什么编译器选择了第二个重载。什么情况会导致这种情况?您的调用Log(tolog1,“Hello”)将使用方法Log(objecttolog,string Instance),这是因为
1. public void Log(object tolog, string Instance)
2. public void Log(params object[] tolog)
我这样调用Log,其中tolog1是一个对象
Log(tolog1,"Hello")
我不明白为什么编译器选择了第二个重载。什么情况会导致这种情况?您的调用Log(tolog1,“Hello”)
将使用方法Log(objecttolog,string Instance)
,这是因为
给定参数列表,您的第一个方法重载Log(object-tolog,string-Instance)
是一个更合适/更接近的候选者,由于指定的规则,编译器可以确定:
- 给定一组适用的候选函数成员,将找到该集合中的最佳函数成员
- 如果集合仅包含一个函数成员,则该函数成员是最佳函数成员
- 否则,最好的函数成员是相对于给定参数列表优于所有其他函数成员的函数成员,前提是使用中的规则将每个函数成员与所有其他函数成员进行比较
- 如果没有一个函数成员优于所有其他函数成员,则函数成员调用为
不明确,出现编译时错误
- 对于每个参数,从AX到PX的隐式转换并不比从AX到QX的隐式转换差,并且
- 对于至少一个参数,从AX到PX的转换比从AX到QX的转换要好
Log(tolog1,“Hello”)
将使用方法Log(objecttolog,string实例)
,这是因为
给定参数列表,您的第一个方法重载Log(object-tolog,string-Instance)
是一个更合适/更接近的候选者,由于指定的规则,编译器可以确定:
- 给定一组适用的候选函数成员,将找到该集合中的最佳函数成员
- 如果集合仅包含一个函数成员,则该函数成员是最佳函数成员
- 否则,最好的函数成员是相对于给定参数列表优于所有其他函数成员的函数成员,前提是使用中的规则将每个函数成员与所有其他函数成员进行比较
- 如果没有一个函数成员优于所有其他函数成员,则函数成员调用为
不明确,出现编译时错误
- 对于每个参数,从AX到PX的隐式转换并不比从AX到QX的隐式转换差,并且
- 对于至少一个参数,从AX到PX的转换比从AX到QX的转换要好
Log(tolog1,“Hello”)
将使用方法Log(objecttolog,string实例)
,这是因为
给定参数列表,您的第一个方法重载Log(object-tolog,string-Instance)
是一个更合适/更接近的候选者,由于指定的规则,编译器可以确定:
- 给定一组适用的候选函数成员,将找到该集合中的最佳函数成员
- 如果集合仅包含一个函数成员,则该函数成员是最佳函数成员
- 否则,最好的函数成员是相对于给定参数列表优于所有其他函数成员的函数成员,前提是使用中的规则将每个函数成员与所有其他函数成员进行比较
- 如果没有一个函数成员优于所有其他函数成员,则函数成员调用为
不明确,出现编译时错误
- 对于每个参数,从AX到PX的隐式转换并不比从AX到QX的隐式转换差,并且
- 对于至少一个参数,从AX到PX的转换比从AX到QX的转换要好
Log(tolog1,“Hello”)
将使用方法Log(objecttolog,string实例)
,这是因为
给定参数列表,您的第一个方法重载Log(object-tolog,string-Instance)
是一个更合适/更接近的候选者,编译器可以根据规则指定来确定这一点