Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#递增前和递增后运算符重载how-to?_C#_Overloading_Operator Keyword - Fatal编程技术网

C#递增前和递增后运算符重载how-to?

C#递增前和递增后运算符重载how-to?,c#,overloading,operator-keyword,C#,Overloading,Operator Keyword,C语言中的h=++i和h=i++之间存在差异。所以我需要的是一种在C#中为增量前(即++I)和增量后(I++)声明不同重载运算符的方法。请问我该怎么做 我知道,两个操作符对它们处理的值都做相同的操作——问题是赋值完成的时间点。我知道如何用C++来做,但这不是问题。我想知道是否有一种方法可以重载此运算符在C#中的两种行为方式,如果有,如何实现。你不能。您只能重载++,唯一的区别是何时调用重载 编辑:此外,对于用户定义的类型,您只能重载+,因此它基本上只是成为您选择的函数的别名。这些运算符的减容没有

C语言中的
h=++i
h=i++
之间存在差异。所以我需要的是一种在C#中为增量前(即++I)和增量后(I++)声明不同重载运算符的方法。请问我该怎么做

我知道,两个操作符对它们处理的值都做相同的操作——问题是赋值完成的时间点。我知道如何用C++来做,但这不是问题。我想知道是否有一种方法可以重载此运算符在C#中的两种行为方式,如果有,如何实现。

你不能。您只能重载++,唯一的区别是何时调用重载


编辑:此外,对于用户定义的类型,您只能重载+,因此它基本上只是成为您选择的函数的别名。

这些运算符的减容没有区别。实际上,它们的行为完全相同,唯一的区别是返回值。
++
操作符重载对这两种情况都有效,不同的返回值由运行时提供,而不是用户代码


编辑:找到它

运行时不返回返回值。“h=++i;”相当于“i=i+1,h=i”;“h=i++;”相当于“h=i;i=i+1;”。这是解析器检测到的语义和随后生成的代码的问题。我有一种感觉,操作符的工作方式与你认为的C#中的不同。我会用不同的措辞来回答你的问题。Eric对另一个问题的简短回答是,运算符以完全相同的顺序执行完全相同的步骤,不同之处在于前缀形式返回新值(在本例中为
i
),而后缀返回旧值的临时副本。请随意进行调整。这实际上意味着您不能过载后增量-它不会按应有的方式工作,对吗?嗯,我想这取决于您使用的是什么类和什么行为。