2013-07-19 6 views
0

Итак, я создаю библиотеку подключений для своего коллеги, чтобы сэкономить время на его текущем проекте. Мой коллега будет использовать эту библиотеку в своем приложении C# для подключения к отдыху api. Внутри библиотеки я создал обработчики для каждого запроса (GET/POST/PUT/DEL). Когда его заявка разговаривает с моей библиотекой я возвращаю ответ, как это:Использует var в C# действительно так плохо?

return client.PostAsync(url, content).Result; 

Это возвращает динамический объект из апи покоя.

Сегодня он использовал мою библиотеку и не мог заставить ее работать в сочетании с его приложением по какой-то причине. Я сказал ему, чтобы использовать вар и что он будет работать так:

var x = API.CreateTraject(parameter1,parameter2); 

Он отказался использовать вар и в конечном итоге тратят около 40 минут выяснить, как заставить его работать без него. Затем он обвинил меня в возвращении динамического объекта и что он никогда не будет использовать var, потому что явный лучше, поэтому он сказал мне.

Я нормально работаю в качестве мобильного разработчика (IOS/Android), где я постоянно использую var.

Теперь мой вопрос:

Является ли это действительно так плохо использовать вар? Должен ли я преобразовать ответ в свою библиотеку, чтобы он мог явно ввести его в свое приложение? По-моему, я предпочел бы использовать var и сэкономить некоторое время, а затем потратить 40 минут, пытаясь сделать это явным.

+0

Комментарии, которые я только что удалил здесь, указывают * точно *, почему этот вопрос не остается открытым здесь. У вас есть хорошая информация ниже. Прочтите, проверьте Интернет или получите книгу. –

ответ

12

Действительно ли так плохо использовать var? Должен ли я преобразовать ответ в свою библиотеку, чтобы он мог явно ввести его в свое приложение? По-моему, я предпочел бы использовать var и сэкономить некоторое время, а затем потратить 40 минут, пытаясь сделать это явным.

var, в C#, является просто компилятором «трюк». Не существует динамического ввода текста, и скомпилированный код точно такой же. Когда вы наводите указатель мыши на переменную, среда IDE сообщит вам, что используется «реальный» тип.

Использует ли он var или ваш фактический тип возврата не должен иметь значения вообще с точки зрения того, как вы создаете свою библиотеку.

Если ваша библиотека возвращает dynamicнеобязательно, это может быть другая проблема, и у пользователя могут быть действительные жалобы. В отличие от var (это всего лишь компромиссный трюк), dynamic действительно сильно изменяет поведение.

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

+0

Спасибо, динамика возвращается остальными api, которые сделаны другой компанией-разработчиком программного обеспечения, с которой мы работаем. Я чувствую, что возвращаю ответ от остальных api, как это должно быть, и если это работает, используя var, почему бы и нет. –

+0

@FlorianSchaal Если это действительно динамический объект, то пусть он использует динамический, а не var ... –

+0

Хорошо, но не будет ли var делать это, как правило, набираться для работы в будущем коде? Скажем, например, динамический контейнер json, и ему нужно извлечь данные из него. –

2

Нет ничего незаконного с использованием var, он просто позволяет компилятору выяснить, какой тип данных должен быть объект.

Единственная опасность в том, что вы, программист, не знаете, что это такое, пока вы не нажмете. Это может привести к проблемам, когда вы думали, что это одно, но это оказалось чем-то другим.

1

Это не плохой использовать implicit typing, это только вопрос стиля.Я лично использую его просто потому, что он делает все объявления переменных переменной равной размеру, независимо от типа.

Однако, используя dynamic, определенно может быть плохо, особенно если он используется чрезмерно. Это означает, что проверки безопасности типа, которые могут быть выполнены, время компиляции необходимо отложить до времени выполнения. Иногда это полезно, но может иметь последствия для производительности. Если вам действительно нужен, чтобы вернуть динамическое, я настоятельно рекомендую вернуть определенный тип из вашего метода API.

Для чего это стоит, если ваш коллега так против неявной типизации он мог бы просто использовал это:

dynamic x = API.CreateTraject(parameter1,parameter2); 
1

var не имеет ничего общего с dynamic. var - около type inference.

Ваши методы не должны возвращать dynamic. В любом случае создайте Generic Methods и позвольте потребителю (вашей коллеге) решить, какой тип объекта возвратит метод.

3

Это нормально использовать var, это не незаконно или что-то еще.

Но я думаю, что если вы знаете тип переменной, объявите переменную с типом. Это упростит чтение кода.

Смежные вопросы