Почему дизайнеры С# приложили три разных значения к ключевому слову "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) опубликовал комментарий в ответ на аналогичный вопрос в своем блоге (первый комментарий). Цитируя его:

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