Почему делает неявно вызов toString на причине типа значения инструкция по полю

Я нашел информацию на основе ответа Kevin Kenny, но я полагал, что отправлю его здесь для других.

документ WSDL А определяет сервисы как наборы сетевых оконечных точек или порты. В WSDL абстрактное определение конечных точек и сообщения разделяются от их конкретного развертывания сети или привязки формата данных. Это позволяет повторное использование абстрактных определений: сообщения, которые являются абстрактными описаниями данных, переданных, и типы порта, которые являются абстрактными наборами операций. Конкретные спецификации протокола и формата данных для конкретного типа порта составляют допускающую повторное использование привязку. Порт определяется путем соединения сетевого адреса с допускающей повторное использование привязкой, и набор портов определяет сервис. Следовательно, документ WSDL использует следующие элементы в определении сетевых служб:

  • Типы †“контейнер для определений типа данных с помощью некоторой системы типов (таких как XSD).
  • сообщение †“абстрактное, введенное определение переданных данных.
  • Операция †“абстрактное описание действия поддерживается сервисом.
  • Тип порта †“абстрактный набор операций поддерживается одной или несколькими конечными точками.
  • Привязка †“конкретный протокол и спецификация формата данных для конкретного типа порта.
  • Порт †“единственная конечная точка, определенная как комбинация привязки и сетевого адреса.
  • Сервис †“набор связанных конечных точек.
13
задан zebrabox 31 August 2009 в 23:58
поделиться

3 ответа

Вы вообще не вызываете неявно ToString . Нет перегрузки метода WriteLine , который принимает строки после строки формата, он принимает только объекты.

Таким образом, вы не вызываете неявно ToString , вы неявно преобразуете int в объект . Первый случай эквивалентен:

Console.WriteLine("val is {0}", (object)val);

Поскольку int является типом значения, происходит упаковка.

Второй случай эквивалентен:

Console.WriteLine("val is {0}", (object)val.ToString());

Поскольку строка является ссылочным типом, ее приведение to object фактически не вызывает испускания какого-либо кода. Он просто соответствует типу с сигнатурой метода.

13
ответ дан 1 December 2019 в 23:15
поделиться

Потому что в первом случае вы передаете int как объект при вызове Console.WriteLine () функция. Это заставляет int быть помещенным в рамку. Во втором методе вы вызываете ToString напрямую, что позволяет избежать упаковки и передает строку в WriteLine , который уже является ссылочным типом.

4
ответ дан 1 December 2019 в 23:15
поделиться

В первом вызове вообще нет вызова .ToString. Вместо этого вы вызываете функцию Console.WriteLine (object). Первый параметр имеет тип int и должен быть заключен в рамку, чтобы соответствовать объекту типа. Позже внутри WriteLite для объекта будет вызываться .ToString.

2
ответ дан 1 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: