C#4中的重载分辨率和可选参数
我正在使用一些代码,它有七个函数TraceWrite
:
void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,bool LogToFileOnly,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,string PieceID,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,LogWindowCommandENUM LogWindowCommand,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,bool UserMessage,int UserMessagePercent,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,string PieceID,LogWindowCommandENUM LogWindowCommand,string Data =“”); void TraceWrite(string Application,LogLevelENUM LogLevel,string Message,LogWindowCommandENUM LogWindowCommand,bool UserMessage,int UserMessagePercent,string Data =“”);
(所有公共静态,命名空间噪音在上面和整个过程中省略。)
那么,有了这样的背景:
1)在其他地方,我用四个参数调用TraceWrite
: string, LogLevelENUM, string, bool
,我得到以下错误:
错误CS1502:'TraceWrite(string,LogLevelENUM,string,string)'的最佳重载方法匹配有一些无效的参数 错误CS1503:参数'4':无法从'bool'转换为'string'
为什么这个调用不能解决第二个重载? ( TraceWrite(string, LogLevelENUM, string, bool, string = "")
)
2)如果我用string, LogLevelENUM, string, string
调用TraceWrite
,将调用哪个重载? 第一个还是第三个? 为什么?
编译器将选择重载#1,因为它与参数数量和签名完全匹配。
你的重载是不好的,你应该在它们之间做出更大的改变。 编译器无法知道您是指第一个还是第三个。
第三个应该没有最后一个参数的默认值,第一个应该在最后一个字符串之前有一个不同的非字符串参数,或者第三个的PieceID参数应该是一个int。
有一种不同的可能更好的解决方案:使用多个默认值。 你有这么多的默认值,他们应该减少重载次数。 使用多个默认值,您可以仅指定最后一个值来调用方法。 希望您可以将重载次数减少到1或2。
上述就是C#学习教程:C#4中的重载分辨率和可选参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static int add(int a = 0, int b = 0) { return a + b; } add(b: 1);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/954858.html