Использование ключевого слова «Использование» в интерфейсе C #


16

Когда я использую C # для написания некоторого кода и определяю интерфейс с помощью Visual Studio 2010, он всегда включает в себя ряд операторов using (как показано в примере)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestEngine.TestNameSpace
{
    interface ITest1
    {
        bool testMethod(int xyz);
    }
} 

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


Спасибо за редактирование. Я просто понял это сам. почему-то операторы использования были опущены, хотя я выбрал их в блоке кода :)
Onno

2
Также прочитайте stackoverflow.com/a/151560/240613 : в вашем коде употребления находятся не в том месте.
Арсений Мурзенко

1
Спасибо за ссылку, это отличное дополнение. После ответа @Akshat Jiwan Sharma стало ясно, что это действительно так, но в то же время вопрос относится к шаблону / настройкам по умолчанию, предоставленным MS при установке VS2010.
Онно

1
@MainMa - это место, где Visual Studio помещает usingsшаблоны в шаблоны по умолчанию, поэтому, если Microsoft не обновит их в ближайшее время, этот вопрос является действительным.
ChrisF

1
@Midhat: Да, но я думаю, что очевидно, о чем спрашивают, когда кто-то читает сам вопрос. Не стесняйтесь редактировать заголовок, если можете придумать лучший.
Онно

Ответы:


49

Visual Studio не знает, какой код вы намереваетесь написать, поэтому включает в себя наиболее распространенные пространства имен по умолчанию в шаблоне «новый класс». Это сделано для того, чтобы вам не нужно было разрешать все ссылки для каждой отдельной строки нового кода, который вы пишете.

После того, как вы написали основной код, если щелкнуть правой кнопкой мыши и выбрать « Упорядочить использование»> «Удалить и отсортировать», он удалит все неиспользуемые.


2
Кроме того, если вы удалите строку «использование» по ошибке, вы можете добавить их обратно, перейдя к имени класса, которое сейчас не может быть найдено, и щелкните правой кнопкой мыши -> Resolve -> Using ...
Mr Lister

10
@MrLister: Если вы еще этого не знали, нажмите «Ctrl +». (контрольный период), когда курсор находится на любом неразрешенном типе или классе, и вы получаете тот же эффект, даже не касаясь мыши.
Стивен Эверс

3
Также как дополнение к ответу: неиспользованные «использования» не будут влиять на время выполнения вашего кода, так как будут загружены только используемые «использования». Однако они могут влиять на IDE и скорость компиляции: stackoverflow.com/questions/136278/…
Holger

Поскольку это общепринятый ответ, я хотел бы упомянуть, что StyleCop будет жаловаться на то, что ссылки находятся в неправильном месте, а также можно редактировать шаблон для нового класса и нового интерфейса и т. Д.
Job

5

Да, вы можете удалить любую директиву using, которая не используется. Эти директивы автоматически добавляются Visual Studio, поскольку они являются наиболее часто используемыми, и если, например, вы не собираетесь использовать linq в интерфейсе, вы можете удалить директиву.

 System.Linq;

То же самое относится и к другим директивам. На мой взгляд, это хорошая практика - перемещать директивы using внутри пространств имен.


Я рад, что вопрос, который вы задали, тоже долго меня озадачивал. :)
Акшат Дживан Шарма

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

3

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


Но действительно ли они необходимы? Есть ли для них веская причина быть в шаблоне?
Онно

Если они вам не нужны, просто удалите их. Они только по умолчанию.
Бернард

Они необходимы, только если один из ваших методов интерфейса является типом возврата, расположенным в одном из них. Система нужна как минимум, а остальные только по мере необходимости для типов, которые вы хотите вернуть.
Грэм

На самом деле, многие классы не нуждаются в системе. Но в целом это облегчает жизнь большинству разработчиков, особенно тем, кто ужасно не привык к .NET и не знает, где взять основные системные классы.
Уайетт Барнетт

0

Короче говоря , они называются пространствами имен . Пространства имен также используются для ссылки на некоторые классы библиотеки в вашем коде. Существует также рекомендуемое руководство по использованию пространств имен в .NET

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

using System.Collections.Generic;
using System.Linq;

Visual Studio будет жаловаться и НЕ компилировать код, как только будут использованы некоторые классы фреймворка / библиотеки без объявления их пространств имен. Таким образом, пространство имен играет роль структурирования вашего кода, а также облегчения ссылок между классами проекта, интерфейсами, конструкциями и т. Д.


-1

использование в C # используется во многих отношениях ... в качестве ключевого слова word с использованием означает ... при запуске, когда мы использовали system; это означает, что есть DLL с именем System, в которой хранятся все основные функции, и мы используем ее для сокращения нашего кода ...

system.WriteLine("Andy");

но когда мы используем систему выше, то мы можем записать это как

WriteLine("Andy");

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


1
Пожалуйста, не пытайтесь добавлять ненужные (и потенциально спам) ссылки на ваши ответы.
ChrisF
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.