2013-12-18 4 views
4

так моя программа имеет следующие 2 строки в началепространств имен: с помощью системы и с помощью System.IO

using System; 
using System.IO; 

Вопрос: Является ли второе утверждение на самом деле необходимо включать методы Sytem.IO и свойства в моем коде? Кажется, что «System.IO» - это «ребенок» пространства имен «Система». Разве первая строка не должна захватывать все дочерние пространства имен? Или я не понимаю пространства имен правильно?

+1

ДА !!!!!!!!!!!! –

+0

Если System.IO - это отдельное пространство имен, чем почему бы просто не назвать его «IO»? –

+0

Resharper поможет вам узнать, как это необходимо –

ответ

5

System.IO пространство имен используется для Input Output операций (Ex: File Operations).

System пространства имен не включает все дочерние пространства имен.
Итак, если вы хотите выполнить IO Операции, вы должны включить System.IO пространство имен explicitly.

Первый вопрос: действительно ли второе заявление, действительно необходимое для , включает методы и свойства Sytem.IO в моем коде?

Да нужно как System пространства имен не включает Child пространства имен.

Второй вопрос: Кажется, что «System.IO» является «дочерним» из пространства имен «Система».

ДаSystem.IO является Дитя System имен.

Примечание: хотя System.IO ребенок namspace из System, он не будет включен, когда вы включаете System namspace

Третий вопрос: Если не первая линия захватить все дочерние пространств имен тоже? Или я не понимаю пространства имен правильно?

Нет первая линия using System; не захватить все дочерние пространства имен, как это не java к import всем child namspeaces с использованием диких карт символов звезды *

2

C# не нравятся Java, где вы можете использовать специальные символы для импорта пространств имен.

using System; 

в C# не то же самое, как

import system.*; 

в Java.

И это действительно все, что нужно. Вам нужно явно включать пространства имен - не более того, чтобы сказать об этом :)

0

Не должна ли первая строка захватывать все дочерние пространства имен?Или я не понимаю пространства имен правильно? не

Нет - это будет только псевдоним для типов в System имен непосредственно. «Вложенные» пространства имен (например, System.IO) автоматически не создаются псевдонимами на C#. Об этом говорится в the help for the using directive (курсив добавлен мною для выразительности):

позволяют использовать типы в пространстве имен, так что вы не должны претендовать на использование типа в этом пространстве имен

Вам необходимо будет пройти квалификацию IO за IO операций. Например, если вы хотите использовать Path класс, вам нужно:

var filename = System.IO.Path.GetFilename(fullPath); 
0

Для расширения на другие ответы, там на самом деле не «ребенок» Пространства имен. Ничто не мешает вам объявить свой собственный System.IO. Конечно, вы не захотите, но для этого вам не нужно родительское пространство System.

Возможно, у вас есть проект, который по умолчанию имеет пространство имен MyCompany.MyProject, но вы можете так же легко объявить XYZ.Some.Other.Random.Namespace в другом файле .cs того же проекта. Не существует наследования пространств имен, а XYZ.Some.Other не существует. C# позволит вам использовать его, однако, когда вы пытаетесь создать экземпляр своего класса, используя остальную часть (Random.Namespace), он не знает, как найти класс и не будет разрешаться, пока вы полностью не квалифицируете пространство имен в using или полностью квалифицируйте объявление переменной.

Смежные вопросы