为了账号安全,请及时绑定邮箱和手机立即绑定

C#中的重载赋值运算符

C#中的重载赋值运算符

C#
慕的地8271018 2019-11-18 12:48:41
我知道=操作符不会过载,但是必须有一种方法可以在这里执行我想要的操作:我正在创建代表定量单位的类,因为我做了一些物理学工作。显然,我不能仅从基元继承,但是我希望我的类的行为与基元完全一样-我只是希望它们的输入方式不同。这样我就可以走了Velocity ms = 0;ms = 17.4;ms += 9.8;等等我不确定该怎么做。我想我只是写一些像这样的类:class Power{    private Double Value { get; set; }    //operator overloads for +, -, /, *, =, etc}但是显然我不能重载赋值运算符。有什么办法可以使我获得这种行为?
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

听起来您应该使用结构而不是类...,然后创建隐式转换运算符,以及用于加法的各种运算符等。


这是一些示例代码:


public struct Velocity

{

    private readonly double value;


    public Velocity(double value)

    {

        this.value = value;

    }


    public static implicit operator Velocity(double value)

    {

        return new Velocity(value);

    }


    public static Velocity operator +(Velocity first, Velocity second)

    {

        return new Velocity(first.value + second.value);

    }


    public static Velocity operator -(Velocity first, Velocity second)

    {

        return new Velocity(first.value - second.value);

    }


    // TODO: Overload == and !=, implement IEquatable<T>, override

    // Equals(object), GetHashCode and ToStrin

}


class Test

{

    static void Main()

    {

        Velocity ms = 0;

        ms = 17.4;

        // The statement below will perform a conversion of 9.8 to Velocity,

        // then call +(Velocity, Velocity)

        ms += 9.8;

    }

}

(作为一个旁注...我看不出它是如何真正代表速度的,因为肯定需要方向和幅度。)


查看完整回答
反对 回复 2019-11-18
?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以创建隐式转换运算符。在MSDN上有一个页面,有一个很好的例子。


使它们成为不可变的结构也是一个好主意。这就是“原始体”的确切含义,这就是不可能从它们继承的原因。您需要一个结构,因为您需要值类型的语义,而不是引用类型的语义。您希望它们是不可变的,因为可变值类型通常不是一个好主意。


查看完整回答
反对 回复 2019-11-18
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我认为它不能重载,因为C#类都是从Object派生的,因此它们基本上是对象,并且当您使用赋值运算符时,基本上只是在引用另一个对象。另一方面,如果使用结构,则基本上需要所有信息,因此使用=运算符时,将复制所有字段。


所以我会说,面对它,并实现一个名为Copy()的函数,您应该没问题:-)


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 819 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信