оператор перегрузки = в c # - PullRequest
       32

оператор перегрузки = в c #

0 голосов
/ 18 декабря 2009

Возможно ли перегрузить оператор = в c #?

когда я вызываю =, я просто хочу скопировать свойства, а не делать левую ссылку для ссылки на другой экземпляр.

Ответы [ 4 ]

9 голосов
/ 18 декабря 2009

Ответ нет :

Обратите внимание, что сам оператор присваивания (=) не может быть перегружен. Присвоение всегда выполняет простое побитовое копирование значения в переменную.

И даже если бы это было возможно, я бы не рекомендовал это. Никто, кто читает код, не будет думать, что есть ЛЮБАЯ вероятность того, что оператор присваивания был перегружен. Метод копирования объекта будет намного понятнее.

2 голосов
/ 18 декабря 2009

Вы не можете перегрузить оператор =. Кроме того, то, что вы пытаетесь сделать, полностью изменит семантику оператора, поэтому, другими словами, это плохая идея.

Если вы хотите указать семантику копирования, укажите метод Clone().

0 голосов
/ 01 марта 2019

Мы можем перегрузить = оператор, но не напрямую.

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. Вы не можете напрямую перегружать "=", но этот способ кода означает то же самое.

0 голосов
/ 18 декабря 2009

Почему бы не создать в объекте метод .CopyProperties (ByVal yourObject As YourObject)?

Вы используете встроенный объект?

...