Я должен согласиться не пустить директиву “использования” в свои проекты C#? [закрытый]

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

25
задан Peter Mortensen 8 January 2010 в 21:18
поделиться

24 ответа

Для немного отличающегося ответа: LINQ.

Дополнительные методы получены только через "использование" операторов. Так или синтаксис запроса или быстрый интерфейс будут [только 110] работа с правильными операторами "использования".

Даже без LINQ, я сказал бы использование, "использующее"... обоснование этого, чем больше можно понять в меньшем количестве символов, тем лучше. Некоторые пространства имен очень глубоки, но не добавляют значения к Вашему коду.

существуют другие дополнительные методы также (не просто LINQ), который перенес бы то же; уверенный, можно использовать статический класс, но быстрый интерфейс более выразителен.

48
ответ дан Marc Gravell 28 November 2019 в 17:33
поделиться

в Законе Demeter говорится, что необходимо использовать только одна точка :

Для многих современных объектно-ориентированных языков, которые используют точку в качестве полевого идентификатора, закон может быть указан просто как "использование только одна точка". Таким образом, код "a.b. Метод ()" нарушает закон где "a. Метод ()" не делает.

, Конечно, это не всегда практично. Но длинные строки разделенных от точки идентификаторов нарушают принятую практику.

РЕДАКТИРОВАНИЕ: Этот ответ кажется спорным. Я принес Law of Demeter главным образом как руководство по стилю, и большинство ответов здесь, кажется, соглашается, что ограничение количества точек является хорошей идеей. По-моему, jQueryJavaScript) страдают от проблем удобочитаемости, частично потому что чрезмерные точки вползают в любого не тривиальная программа.

0
ответ дан gimel 28 November 2019 в 17:33
поделиться

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

Это также помогает мне понять к тому, есть ли у меня уже соответствующие ссылки в проекте. Как то, если я выписываю Систему. Сеть. UI, но не может найти Расширения тогда, я знаю, что забыл/, кто когда-либо настраивал проект, забыл вставлять ссылки Ajax ASP.NET.

я делаю его все меньше и меньше, хотя в эти дни, когда я использую ярлык для квалификации класса (Ctrl +.). При выводе названия класса (правильно в корпусе) и нажатие, что ярлык, Вы можете легко полностью качество/, добавляет оператор использования.

Это является большим для StringBuilder, у меня никогда, кажется, нет Системы. Текст, таким образом, я просто ввожу StringBuilder-> Ctrl +. и там мы идем, я добавил использование.

0
ответ дан Aaron Powell 28 November 2019 в 17:33
поделиться

В системе как.NET, где существуют типы в пространствах имен, необходимо принять решение: часть пространства имен имени, или действительно ли это - организационный инструмент для типов?

Некоторые системы выбирают право преимущественной покупки. Затем Ваш using директивы были бы в состоянии, сокращая имена, которые Вы используете чаще всего.

В.NET, это - последний. Например, рассмотрите System.Xml.Serialization.XmlSerializationReader. Наблюдайте дублирование между пространством имен и типом. Поэтому в этой модели, имена типов должны быть уникальными, даже через пространства имен.

, Если я помню правильно, можно найти описанным командой CLR здесь: http://blogs.msdn.com/kcwalina/archive/2007/06/01/FDGLecture.aspx

Его более простое, чтобы скопировать и вставить код в другие исходные файлы.

Правда, но если Вы - копия/вставка много кода, Вы, вероятно, делаете его неправильно.

Это более читаемо (Вы видите пространства имен сразу же)

Наблюдение, что пространства имен не важны, с тех пор, по крайней мере, когда Вы следуете инструкциям Microsoft, имена типов уже уникальны; пространство имен действительно не предоставляет Вам полезную информацию.

0
ответ дан Jay Bazuzi 28 November 2019 в 17:33
поделиться

У него могла бы быть точка с somethings. Например, в компании я работаю в, у нас есть много сгенерированных классов кода и таким образом, весь наш код генерировал классы, мы используем полностью определенные названия классов для предотвращения любых потенциальных конфликтов.

Со всеми стандартными классами.NET, которые мы имеем, мы просто используем операторы использования.

0
ответ дан Paul Mendoza 28 November 2019 в 17:33
поделиться

Вместо 'copy-n-paste' я называю его 'copy-n-rape', потому что кодом злоупотребляют 99,9% времен, когда это проведено посредством этого процесса. Таким образом, там, это - мой ответ на выравнивание Вашего коллеги № 1 для того подхода.

На ноте стороны, инструменты как Resharper добавят операторы использования наверху, когда Вы добавите код, которому нужны они к Вашему коду (поэтому, даже если Вы, которых 'copy-n-rape' кодируют как этот, можно сделать так легко).

Персональные предпочтения в стороне, я думаю, что Ваши выравнивания намного более ценны, чем его, поэтому так предполагая, что они - все актуальные вопросы, я был бы все еще reccomend запись операторов использования наверху. Я не сделал бы его 'запретом', хотя, так как я рассматриваю стандарт кодирования как инструкции, а не правила. В зависимости от Вашего размера команды могло бы быть очень трудно осуществить подобные вещи (или сколько пробелов для добавления отступа или стилей добавления отступа, и т.д. и т.д.).

Делают его инструкцией так, чтобы все другие разработчики не стеснялись к replcae полностью определенные имена с более короткими версиями и, со временем, кодовая база упадет в соответствии с инструкцией. Внимательно наблюдайте за людьми, занимающими время далеко от выполнения работы для простого изменения всех случаев одного стиля к другому - потому что это не очень продуктивно, если Вы не делаете ничего больше.

0
ответ дан FOR 28 November 2019 в 17:33
поделиться

Вы действительно хотите поддержать код тот путь? Даже с intellisense весь этот ввод не будет продуктивным.

0
ответ дан David Robbins 28 November 2019 в 17:33
поделиться

Я рекомендую против суждения Вашего коллеги. Для меня читающий код намного легче, если у Вас нет длинного пространства имен, создающего помехи строке. Просто вообразите это:

Namespace1.Namespace2.Namespace3.Type var = new Namespace1.Namespace2.Namespace3.Type(par1, par2, par3);

в противоположность:

Type var = new Type(par1, par2, par3);

Относительно вставки копии - у Вас действительно есть Shift+Alt+F10, который добавит пространство имен, таким образом, это не должна быть проблема.

0
ответ дан rslite 28 November 2019 в 17:33
поделиться

Можно также использовать псевдонимы...:

using diagAlias = System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            diagAlias.Debug.Write("");
        }
    }
}
1
ответ дан Peter Mortensen 28 November 2019 в 17:33
поделиться

Я думаю с функции IntelliSense в Visual Studio и использующий некоторые сторонние продукты как ReSharper, мы больше не заботимся или о сделать наш код полностью определенным или о нет. Это становилось больше не трудоемким для разрешения пространств имен, когда Вы копируете и вставляете свой код.

1
ответ дан Peter Mortensen 28 November 2019 в 17:33
поделиться

если Вы неоднократно копируете и вставляете код, который не указывает на создание стандартного DLL для включения в каждый из проектов?

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

1
ответ дан Mauro 28 November 2019 в 17:33
поделиться

Установите ReSharper на Вас машины. Расслабьтесь и позвольте ему вести Вашего коллегу к справедливости. Серьезно, существуют большие сражения, но это - вид кодера, чтобы избежать, если требуется больше чем две минуты, чтобы попытаться обучить.

1
ответ дан Unsliced 28 November 2019 в 17:33
поделиться

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

1
ответ дан Adam Haile 28 November 2019 в 17:33
поделиться

О, мальчик. Один шаг мог бы учить Вашего коллегу ctrl +. Это автоматически вставит операторы использования для Вас.

1
ответ дан Cristian Libardo 28 November 2019 в 17:33
поделиться

Одна из причин, Вы используете "использование", - то, что оно говорит любому читающему источник вид вещей, которые будет делать Ваш класс. Используя Систему. IO говорит читателю о выполнении операций ввода-вывода, например.

3
ответ дан RB. 28 November 2019 в 17:33
поделиться

Также стоит отметить, что инструмент как ReSharper (почему Вы не уже использование его?) добавят соответствующие строки 'использования' для Вас в значительной степени автоматически.

4
ответ дан Peter Mortensen 28 November 2019 в 17:33
поделиться

Поскольку у нас есть инструмент в C# для автоустановки оператора использования путем нажатия Ctrl+dot - я не вижу причины не использовать его. Другая "прохладная" вещь здесь:

Думают о Вас, имеют два пространства имен:

ConsoleNamespace1

и

ConsoleNamespace2

Оба имеют Консольный класс. Теперь можно изменить все ссылки на ConsoleNamespace2 только с одной строкой кода - это прохладно.

Мой совет: Используйте using, если Вы можете, полное, если Вы должны. Я не думаю, что полностью один, если легче читает. Знайте свою платформу, и это никогда не будет проблемой.

6
ответ дан Peter Mortensen 28 November 2019 в 17:33
поделиться

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

, Если что-нибудь это делает код менее читаемым и более конкретным - лично, мне не интересно, где стандартные объекты живут, это сродни обращению к Вашему коллеге их полным именем, снабженным префиксом конкретный адрес Вашего рабочего места.

существуют времена, однако, где иногда это делает код более читаемым, таким образом, жесткие правила не применимы, просто здравый смысл.

9
ответ дан Richard Harrison 28 November 2019 в 17:33
поделиться

Самая большая проблема, которую я нахожу с не использованием директивы "использования", не находится на instantiantion и определении классов. Это находится на передаче в значениях к функциям, которые определяются определенные в пространстве имен. Сравните эти две части кода (VB.Net, потому что это - то, что я знаю, но Вы получаете изображение).

Module Module1

    Sub Main()
        Dim Rgx As New System.Text.RegularExpressions.Regex("Pattern", _
            System.Text.RegularExpressions.RegexOptions.IgnoreCase _
            Or System.Text.RegularExpressions.RegexOptions.Singleline _
            Or System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)


        For Each result As System.Text.RegularExpressions.Match In Rgx.Matches("Find pattern here.")
            'Do Something
        Next
    End Sub

End Module

И это

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim Rgx As New Regex("Pattern", _
            RegexOptions.IgnoreCase _
            Or RegexOptions.Singleline _
            Or RegexOptions.IgnorePatternWhitespace)


        For Each result As Match In Rgx.Matches("Find pattern here.")
            'Do Something
        Next
    End Sub

End Module

В случаях как это, где много перечислений используется, а также объявление Ваших переменных, встроенных в для цикла, для сокращения объема, не используя "использование" или "импорт" в случае vb. Сеть, может привести к действительно плохой удобочитаемости.

19
ответ дан Kibbee 28 November 2019 в 17:33
поделиться

Минута Ваш коллега сказал "код копии-и-вставки", он потерял все доверие.

23
ответ дан Ryan Lundy 28 November 2019 в 17:33
поделиться

Что я думаю об этом?

я думаю, что человек, который придумал бы идею как это, и кто выровняет по ширине ее способ, которым он имеет, очень вероятно, будет иметь много других фундаментальных недоразумений о языке C# и разработке.NET.

37
ответ дан Robert Rossney 28 November 2019 в 17:33
поделиться

Если необходимо скопировать и вставить код вокруг так относительно на самом деле преимущества того, что полностью определили типы, у Вас есть большие проблемы.

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

65
ответ дан Franci Penov 28 November 2019 в 17:33
поделиться

"Минута, Ваш коллега сказал "код копии-и-вставки", он потерял все доверие". так же.

"В Законе Demeter говорится..." так же

..., и я добавляю. Это просто абсурдно, не используя использование операторов. Получите ReSharper, найдите некоторый способ учить этого товарища, как это сделано, и если это, кажется, не вступает в силу - с приведенными причинами, пора начать изучать различное задание. Просто корреляции того, что соглашается с такими понятиями как не использование операторов использования, страшны. Вы застрянете, работая дни с 16 часами, фиксируя путаницу, если это будет одним из правил. Нет никакого сообщения, с чем другим типом оскорбления для здравого смысла и логики Вы столкнетесь затем.

Серьезно, хотя, это не должно даже быть поднято с инструментами как доступный ReSharper. Деньги тратятся впустую, купите ReSharper, действительно кодируйте очистку и возвратитесь к созданию применимого программного обеспечения.:) Это составляет мои 2 цента.

1
ответ дан Adron 28 November 2019 в 17:33
поделиться
[

] Разве тот факт, что Visual Studio включает множество операторов в верхней части практически каждого файла, не дает намёка на то, что [] использование операторов [] считается хорошей практикой? [

]
0
ответ дан 28 November 2019 в 17:33
поделиться