Почему дизайнеры С# приложили три разных значения к ключевому слову "using"?
Ключевое слово using
имеет три разных значения:
- сглаживание имен типов/имен
- Импорт пространства имен
- Синтаксический сахар для обеспечения Dispose называется
Документация вызывает первые две директивы определения (которые, я предполагаю, означает, что они являются предварительной обработкой в природе), в то время как последнее - это утверждение.
Независимо от того, что они отличаются своими синтаксисами, почему разработчики языка усложнят семантику ключевого слова, добавляя к нему три разных значения? Например, (отказ от ответственности: от верхней части головы, могут быть, конечно, лучшие примеры), почему бы не добавить такие ключевые слова, как alias
и import
? Технические, теоретические или исторические причины? Ключевое слово квоты?; -)
Проприетарный образец:
import System.Timers;
alias LiteTimer=System.Threading.Timer;
alias WinForms=System.Windows.Forms;
public class Sample {
public void Action() {
var elapsed = false;
using(var t = new LiteTimer.Timer(_ => elapsed = true) {
while (!elapsed) CallSomeFinickyApi();
}
}
}
"Использование" - это такое неопределенное слово.
Ответы
Ответ 1
Это вызов jugdment. Я лично сделал бы выбор, который вы предлагаете: используйте что-то вроде "псевдонима" и "импорт". Я отмечаю, что "псевдоним" является контекстуальным ключевым словом С# и используется для объявления, что псевдоним extern используется в конкретном файле; более естественно использовать это для объявления псевдонима типа вместо "использования".
Форма заявления "использование" была фактически добавлена довольно поздно в игре; дизайнеры хотели использовать "использование" не только потому, что это уже ключевое слово, но также потому, что оно подчеркивает, что ресурс используется в определенной области кода и затем уходит. Тот факт, что "использование" уже имел смысл в директивном смысле, был счастливой случайностью.
Если эта тема вас интересует, я написал несколько статей об этом. Здесь, например, у меня есть статьи о том, как "фиксированные", "частичные" и "в" также имеют несколько значений в С#:
http://blogs.msdn.com/ericlippert/archive/tags/What_2700_s+The+Difference_3F00_/default.aspx
Еще один ответ также ссылается на мою статью, в которой обсуждается, как мы гарантируем, что не слишком много слов зарезервировано для использования языком:
http://ericlippert.com/2009/05/11/reserved-and-contextual-keywords/
Ответ 2
В вашем вопросе предполагается, что 3 контекстных значения для 1 ключевого слова более сложны, чем 3 разных ключевых слова с разными значениями. Некоторые могут оспаривать это.
В мои годы кодирования С# я не могу сказать, что меня когда-либо путали в смысле "использования"; это всегда ясно из контекста.
Ответ 3
Я думаю, что разработчик языка вынужден использовать как можно меньше ключевых слов, чтобы минимизировать конфликты имен с идентификаторами. Если вы представляете, что кто-то портирует код из С++ или Java, меньшее количество ключевых слов подразумевает меньшую вероятность столкновений.
Это не относится к вашему вопросу, но эта проблема особенно актуальна при создании новой версии существующего языка. В С# 3 добавлены контекстные ключевые слова, то есть идентификаторы, которые становятся ключевыми словами только при использовании в конкретной ситуации. Просто чтобы не повредить существующий код.
И я согласен с @Judas, что 3 использования "использования" не путают (IMHO). С# уже был - ошибочно, я думаю, обвинен в том, что он слишком похож на Java. Представьте, что некоторые люди сказали бы, если бы у него было ключевое слово "import"...
Ответ 4
Эрик Липперт (который, как я полагаю, в настоящее время работает над командой С# в Microsoft) опубликовал комментарий в ответ на аналогичный вопрос в своем блоге (первый комментарий). Цитируя его:
Это сложная точка языка дизайн; когда используется одно ключевое слово представляют два совершенно разных концепций, это может ввести в заблуждение. Но введение нового ключевого слова для каждой концепции делает язык немного раздутым. Я лично бы выбрал "импорт" или некоторый такой синтаксис для чтобы убедиться, что это не путать с формой заявления, но я понимаю, что его решение звоните.