为值类型实现运算符++的正确方法是什么?

吉菲吉

我正在研究Number结构的自定义实现,其存储和操作数值的方法非常不同。

该结构是完全不变的-所有字段都实现为 readonly

我正在尝试实现++and--运算符,但遇到了一些混乱:
如何执行分配?
还是平台会自动处理此问题,我只需要返回即可n + 1

public struct Number
{
    // ...
    // ... readonly fields and properties ...
    // ... other implementations ...
    // ...

    // Empty placeholder + operator, since the actual method of addition is not important.
    public static Number operator +(Number n, int value)
    {
        // Perform addition and return sum
        // The Number struct is immutable, so this technically returns a new Number value.
    }

    // ERROR here: "ref and out are not valid in this context"
    public static Number operator ++(ref Number n)
    {
        // ref seems to be required,
        // otherwise this assignment doesn't affect the original variable?
        n = n + 1;
        return n;
    }
}

编辑:我认为这不是关于增量和减量运算符的其他问题的重复,因为这涉及在这种情况下行为不同于类的值类型。我了解类似的规则适用于++--,但是我相信这个问题的背景足以与众不同,足以独立存在。

埃里克·利珀特

该结构是完全不变的-所有字段都实现为 readonly

好的!

我正在尝试实现++and--运算符,但遇到了一些混乱:如何执行分配?

你不知道 记住++操作员的工作。无论是前缀还是后缀:

  • 获取操作数的原始值
  • 计算后继值
  • 存储后继者
  • 产生原始值或后继值

C#编译器不知道如何为您的类型执行此过程的唯一部分是“计算后继者”,因此这是您覆盖的++运算符应执行的操作。只需退还继承人;让编译器弄清楚如何进行分配。

还是平台会自动处理此问题,我只需要返回即可n + 1

是的,这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重载plus运算符的正确方法是什么?

来自分类Dev

使用“ in”运算符编译直方图的正确方法是什么?

来自分类Dev

为什么Rust的运算符的类型为Output变量?

来自分类Dev

实现堆排序的正确方法是什么?

来自分类Dev

转换值的正确方法是什么?

来自分类Dev

在C ++中为混合模式算法实现运算符重载的正确方法

来自分类Dev

在Scala中使用运算符orElse的正确方法是什么?

来自分类Dev

对派生类重载赋值运算符的正确方法是什么?

来自分类Dev

在C ++中定义Typecast运算符模板的正确方法是什么

来自分类Dev

浮点运算符正确舍入的实现

来自分类Dev

为多个VisualStateGroups实现VisualStates的正确方法是什么?

来自分类Dev

pymongo中$ and运算符的正确用法是什么?

来自分类Dev

pymongo中$ and运算符的正确用法是什么?

来自分类Dev

Matlab:使用复数相乘-正确的运算符是什么?

来自分类Dev

为该模块添加类型定义的正确方法是什么

来自分类Dev

检查Size类型是否为空的正确方法是什么?

来自分类Dev

为Redux动作定义类型的正确方法是什么?

来自分类Dev

在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

来自分类Dev

移位运算符输出是什么类型?

来自分类Dev

逻辑运算符的类型是什么?

来自分类Dev

关联类型中+运算符的作用是什么?

来自分类Dev

Python 中“特殊”运算符/指令的类型是什么?

来自分类Dev

带三元运算符的Walrus运算符的正确语法是什么?

来自分类Dev

为 S3 类实现提取和分配运算符的最佳方法

来自分类Dev

对象可能是未定义的VS Null断言运算符=>使用的正确方法是什么?

来自分类Dev

为可能没有值的数据类型指定字段的正确方法是什么

来自分类Dev

在隐式类运算符中防止值超出范围的合适方法是什么?

来自分类Dev

在MvvmCross 4.1.4中实现片段的正确方法是什么

来自分类Dev

用Redux实现事务的正确方法是什么

Related 相关文章

  1. 1

    重载plus运算符的正确方法是什么?

  2. 2

    使用“ in”运算符编译直方图的正确方法是什么?

  3. 3

    为什么Rust的运算符的类型为Output变量?

  4. 4

    实现堆排序的正确方法是什么?

  5. 5

    转换值的正确方法是什么?

  6. 6

    在C ++中为混合模式算法实现运算符重载的正确方法

  7. 7

    在Scala中使用运算符orElse的正确方法是什么?

  8. 8

    对派生类重载赋值运算符的正确方法是什么?

  9. 9

    在C ++中定义Typecast运算符模板的正确方法是什么

  10. 10

    浮点运算符正确舍入的实现

  11. 11

    为多个VisualStateGroups实现VisualStates的正确方法是什么?

  12. 12

    pymongo中$ and运算符的正确用法是什么?

  13. 13

    pymongo中$ and运算符的正确用法是什么?

  14. 14

    Matlab:使用复数相乘-正确的运算符是什么?

  15. 15

    为该模块添加类型定义的正确方法是什么

  16. 16

    检查Size类型是否为空的正确方法是什么?

  17. 17

    为Redux动作定义类型的正确方法是什么?

  18. 18

    在用户定义的类型和现有的类型之间定义现有的(例如Prelude)运算符的正确方法是什么?

  19. 19

    移位运算符输出是什么类型?

  20. 20

    逻辑运算符的类型是什么?

  21. 21

    关联类型中+运算符的作用是什么?

  22. 22

    Python 中“特殊”运算符/指令的类型是什么?

  23. 23

    带三元运算符的Walrus运算符的正确语法是什么?

  24. 24

    为 S3 类实现提取和分配运算符的最佳方法

  25. 25

    对象可能是未定义的VS Null断言运算符=>使用的正确方法是什么?

  26. 26

    为可能没有值的数据类型指定字段的正确方法是什么

  27. 27

    在隐式类运算符中防止值超出范围的合适方法是什么?

  28. 28

    在MvvmCross 4.1.4中实现片段的正确方法是什么

  29. 29

    用Redux实现事务的正确方法是什么

热门标签

归档