过载运算符=在c#中

时间:2009-12-18 02:59:01

标签: operator-overloading

是否可以在c#中重载operator =?

当我调用=时,我只想复制属性,而不是让左手引用来引用另一个实例。

4 个答案:

答案 0 :(得分:9)

答案是no

  

请注意,赋值运算符本身(=)不能重载。赋值总是将值简单地逐位复制到变量中。

即使有可能,我也不会推荐它。没有人阅读代码会认为赋值运算符过载的可能性很大。复制对象的方法会更加清晰。

答案 1 :(得分:2)

您无法重载=运算符。此外,你想要做的事情将完全改变运算符的语义,换句话说,这是一个坏主意。

如果要提供复制语义,请提供Clone()方法。

答案 2 :(得分:0)

为什么不在对象中创建.CopyProperties(ByVal yourObject As YourObject)方法?

您使用的是内置对象吗?

答案 3 :(得分:0)

我们可以重载=运算符,但不能直接。

using System;
class Over
{
    private int a;
    public Over(int a )
    {   
        this.a = a;
    }

public int A { get => a; }

    public static implicit operator int(Over obj)
    {
        return obj.A;
    }
}
class yo
{
    public static void Main()
    {
        Over over = new Over(10);
        int a = over;
    }
}

在这里,当您调用该运算符重载方法时,它正在调用=运算符本身将其转换为int。您不能直接重载“ =”,但是这种代码方式是相同的。