代码之家  ›  专栏  ›  技术社区  ›  Benny

过载运算符=in c#

  •  0
  • Benny  · 技术社区  · 15 年前

    是否可以在c_中重载operator=

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

    4 回复  |  直到 5 年前
        1
  •  9
  •   Kaleb Brasee    15 年前

    答案是 no :

    请注意,不能重载赋值运算符本身(=)。赋值总是将一个值的简单位拷贝到一个变量中。

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

        2
  •  2
  •   Anon.    15 年前

    你不能超载 = 操作员。此外,您所要做的将完全改变运算符的语义,因此换句话说,这是一个坏主意。

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

        3
  •  0
  •   Shaun Mason    15 年前

    为什么不在对象中生成.copyProperties(byval yourobject as yourobject)方法?

    您使用的是内置对象吗?

        4
  •  0
  •   srikar kulkarni    5 年前

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

    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。您不能直接重载“=”,但这种代码方式的含义相同。