Почему нельзя '=' перегружать в C #? - PullRequest
18 голосов
/ 01 марта 2009

Мне было интересно, почему я не могу перегрузить '=' в C #? Могу ли я получить лучшее объяснение?

Ответы [ 12 ]

0 голосов
/ 22 ноября 2016

Этот код работает для меня:

public class Class1
{

    ...

    public static implicit operator Class1(Class2 value)
    {
        Class1 result = new Class1();

        result.property = value.prop;

        return result;

    }

}
0 голосов
/ 08 июня 2012

Было бы полезно иметь возможность определять специальную семантику для операций присваивания, но только если бы такая семантика могла применяться ко всем ситуациям, когда одно место хранения данного типа копировалось в другое. Хотя стандарт C ++ реализует такие правила присваивания, он может позволить себе определять все типы во время компиляции. Когда все Reflection и дженерики добавляются в список, все становится намного сложнее.

В настоящее время правила в .net указывают, что для места хранения может быть установлено значение по умолчанию для его типа - независимо от того, что это за тип - путем обнуления всех байтов. Кроме того, они указывают, что любое хранилище может быть скопировано в другое хранилище того же типа путем копирования всех байтов. Эти правила применяются ко всем типам, включая дженерики. Имея две переменные типа KeyValuePair<t1,t2>, система может копировать одну в другую, не зная ничего, кроме требований к размеру и выравниванию этого типа. Если бы t1, t2 или типу было возможно любое поле в пределах одного из этих типов , реализовать конструктор копирования, код, который копировал бы один экземпляр структуры в другой, был бы очень более сложный.

Это не означает, что такая возможность дает некоторые существенные преимущества - возможно, что, если бы разрабатывался новый каркас, преимущества операторов присвоения пользовательских значений и конструкторов по умолчанию превысили бы затраты. Однако затраты на внедрение будут существенными в новой структуре и, вероятно, будут непреодолимыми для существующей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...