gpt4 book ai didi

c# - C# 中的运算符重载

转载 作者:行者123 更新时间:2023-11-30 19:12:20 25 4
gpt4 key购买 nike

我对 C# 语言中的运算符重载有点困惑,你能告诉我运算符重载本质上是静态的还是动态的。

最佳答案

如果你的意思是“它是不是多态的?”那么答案是否定的 - 运算符由 C# 编译器静态找到,除非您使用 dynamic类型。例如,考虑这段代码:

using System;

class Test
{
static void Main(string[] args)
{
string x = "hello";
string y = new string(x.ToCharArray());
Console.WriteLine(x == y); // True

object ox = x;
object oy = y;
Console.WriteLine(ox == oy); // False

dynamic dx = x;
dynamic dy = y;
Console.WriteLine(dx == dy); // True
}
}

第一次调用 ==使用 string 中声明的运算符,因为编译器知道这两个操作数的类型都是 string .它比较两个字符序列,发现它们相等,然后返回 True。

第二次调用 ==使用 object 中声明的运算符因为表达式的编译时类型 oxoyobject .此运算符仅比较引用。引用不同(它们引用不同的值),因此返回 False。请注意,在这种情况下,oxoy将在执行时引用字符串,但是当编译器决定调用哪个重载时,不会考虑到这一点。 (它知道 oxoyobject 类型。)

第三次调用 ==使用动态类型在执行时发现运算符,使用引用的实际 类型,而不是表达式的编译时类型。这会发现 string 中的过载,因此运算符再次返回 True。

关于c# - C# 中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com