Что означает выражение «квалифицировать использование типа в этом пространстве имен» в C # - PullRequest
0 голосов
/ 05 декабря 2018

Я новичок в C # и столкнулся с приведенной ниже ошибкой при использовании функции Console.WriteLine.

The name 'Console' does not exist in the current context

Насколько я понимаю, ключевое слово using состоит в том, что оно действует как require илиimport в JavaScript.

Поэтому я добавил оператор using System; вверху файла пространства имен, так как предложение от IDE дало мне что-то вроде System.Console.Теперь у меня больше нет ошибки.

Из любопытства я перешел к документации по C # в с использованием директивы .И существует следующее состояние:

Директива using имеет три применения:

Чтобы разрешить использование типов в пространстве имен, чтобы у вас не былочтобы квалифицировать использование типа в этом пространстве имен:

Что означает часть - , чтобы вам не приходилось квалифицировать использование типа в этом пространстве имен: означает.

И почему ключевое слово using называется директивой или что такое директива в общем программировании в отличие от директив, которые я использую, например, в Angular?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Что значит часть - так что вам не нужно квалифицировать использование типа в этом пространстве имен: среднее.

C # различает простых имен , которые имеют имя и необязательный аргумент типа, например String или List<int> и квалифицированные имена , которые имеют несколько имен, разделенных точками, например System.String или System.Collections.Generic.List<int>.

Если у вас есть директива using, вы можете исключить используемый квалификатор.

И почему ключевое слово using называется директивой или что такое директива в общем программировании

В C # у нас есть декларации как namespace Foo или class Bar или void M() {} У нас есть операторов , как foreach(var foo in bar) blah(); Что тогда using System;?Это не декларация;новый элемент не объявлен объявлен .Это не оператор - операторы являются элементами потока управления, но директива using не вводит поток управления.Это указывает компилятору иметь определенное правило для разрешения имен, поэтому директива .

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

0 голосов
/ 05 декабря 2018

Что означает деталь - , чтобы вам не приходилось квалифицировать использование типа в этом пространстве имен : значит?

Есть статический класс Math в пределах пространства имен System.Вы можете ссылаться на его статический метод Min, например, без using:

var z = System.Math.Min( x, y );

или вы можете избавиться от System. с помощью using пространства имен System:

using System;
[...]
var z = Math.Min( x, y );

или вы можете даже избавиться от Math. (начиная с C # 6):

using static System.Math;
[...]
var z = Min( x, y );

Третий вариант в основном позволяет обрабатывать статические классы как пространства имен.

...