Перегрузка метода с типами данных Dynami c - PullRequest
0 голосов
/ 30 мая 2020

Почему компилятор ограничивает перегрузку метода указанным ниже способом. Ошибка компиляции. Я получаю метод обновления с параметром типа Dynami c.

Ошибка - тип «Программа» уже определяет элемент с именем «обновление» с одинаковые типы параметров

static void update(string name)
    {

    }
static void update(object name)
    {

    }

static void update(dynamic name)
    {

    }

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Когда вы используете тип параметра dynamic, т.е.

static void update(dynamic name)
{
}

, компилятор изменяет подпись вашего метода, чтобы использовать вместо него object, т.е.

static void update(object name)
{
}

, а затем вставляет некоторые "magi c" в теле вашего метода, чтобы обрабатывать name как объект с динамической типизацией. Однако это вводит важное ограничение: у вас не может быть другого метода update, который принимает object, потому что он у вас уже есть.

Подумайте об этой перегрузке с точки зрения разработчика языка: когда вы видите вызов перегрузки между object и dynamic, не было бы интуитивно понятного способа разрешения t ie, потому что и object, и dynamic могли бы вместить объекты любого типа. Следовательно, подобные перегрузки в любом случае следует запретить, независимо от базовой реализации для dynamic.

1 голос
/ 30 мая 2020

Потому что dynamic также является типом object. Вы можете проверить сгенерированный код IL. Таким образом, это дает ошибку компиляции для

static void update(object name)
    {

    }

static void update(dynamic name)
    {

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