C#中的运算符重载我对C#语言中的运算符重载有点困惑,你能告诉我运算符本质上是静态的还是动态的。如果你的意思是“它是多态的吗?”那么答案是否定的——除非您使用动态类型,否则C#编译器会静态查找运算符。例如,考虑以下代码:类测试{staticvoidMain(string[]args){stringx="hello";字符串y=新字符串(x.ToCharArray());Console.WriteLine(x==y);//真对象ox=x;对象oy=y;Console.WriteLine(ox==oy);//假动态dx=x;动态dy=y;Console.WriteLine(dx==dy);//True}}第一次调用==使用在字符串上声明的运算符,因为编译器知道两个操作数都是字符串类型。它比较两个字符序列,发现它们相等,然后返回True。第二次调用==使用在object声明的运算符,因为表达式ox和oy的编译时类型是object。此运算符仅比较引用。引用不同(它们引用不同的值),因此返回False。请注意,在这种情况下,ox和oy的值将在执行时引用字符串,但编译器在决定调用哪个重载时不会考虑这一点。(它只知道ox和oy是对象类型。)第三次调用==使用动态类型在执行时发现运算符,使用实际的引用类型,而不是表达式的编译时类型。这找到了字符串的重载,因此运算符再次返回True。基本的运算符重载是静态的:publicstaticSomeClassoperator++(SomeClassarg)尝试这个系列来展示一些例子了解更多关于C#的学习教程,希望大家多多关注——本文收集自网络,确实不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
