2010-08-05 5 views
4

Существует ли общее правило для ссылки на тип из другого пространства имен. Как вы последовательно использовать:Использование директивы vs для полного имени пути

using System.Drawing; 

вместо определения его при необходимости:

System.Drawing.Graphics gr; 

Я склонен ввести полное пространство имен, когда я только «вызова» это один раз. Есть ли какая-нибудь передовая практика?

ответ

9

Что я использую (и то, что я полагаю, что большинство разработчиков используют), чтобы всегда говорить

using System.Drawing; 

и резерв

System.Drawing.Graphics gr; 

только там, где есть конфликт там быть два Graphics, определенные в разных пространствах имен, и даже тогда я по-прежнему предпочитаю использовать using для их дифференциации:

using MyGraphics=My.Own.Conflicting.Named.Graphics; 
// : 
var myGraph = new MyGraphics(); 
2

Вызов чего-то однажды может превратиться, далее по линии, называя его 10, 20 или n раз. Мое эмпирическое правило состоит в том, что команда разработчиков C# поместила «использование» на язык по какой-то причине, поэтому я, если вы извините каламбур, используйте его.

Если, например, я пишу следующий код:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush() 
{ 
    System.Drawing.Color c = System.Drawing.Color.Red; 
    System.Drawing.Drawing2D.HatchBrush h = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

который использует только Color и HatchBrush один раз, я бы, конечно, предпочитаю читать:

private HatchBrush GetHatchBrush() 
{ 
    Color c = Color.Red; 
    HatchBrush h = new HatchBrush(HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

Даже лучше, лично, будет:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush() 
{ 
    var c = Color.Red; 
    var h = new HatchBrush(HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

Как сказал Джеймс Карран, единственная t ime Я когда-либо полностью квалифицировал класс с его полным пространством имен, вместо того, чтобы использовать using, было бы, если привнесение объекта namesapce в область видимости создало бы двусмысленность.

2

Я только избегаю using утверждений о условиях, когда использование двух разных пространств имен приведет к столкновению имен.

+0

И даже тогда я использую псевдоним на одном из пространств имен. –

1

Здесь нет общепринятой лучшей практики.
Просто используйте здравый смысл. Единственная цель здесь - читаемость.

Если относительно редкий класс используется всего один или два раза в вашем коде, используйте полное имя.

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

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

1

Я, как правило, набираю полное пространство имен, когда Я только «вызываю» его один раз. Есть ли любая лучшая практика?

Вообще я вижу «с использованием» используется даже тогда, когда только называя что-то когда-то, это, кажется, стандарт (а также то, что Resharper будет толкать вас к, и многие люди, как правило, как их соглашения по умолчанию)

3

Полностью квалифицированные имена в коде отвлекают и шумно. Я предпочитаю никогда не иметь их. Если существует конфликт пространства имен, использование этого псевдонима может разрешить это.

Кроме того, давайте посмотрим правде в глаза, 99,99% из нас. Разработчики C# используют Visual Studio, поэтому, зная, какое пространство имен и/или тип сборки поступает, происходит так же быстро, как F12, или просто навешивает мышь на секунду.

Единственный раз, когда мне нравятся полные имена в коде, в образцах кода, например, здесь, в переполнении стека, чтобы четко указать, какой тип используется.

0

Если вы думаете в модулях, которые должны ответить на вопрос немного лучше для вас.

Его вопрос у вас будет иметь столкновение имен и если вы злоупотребляете использованием пространства имен или нет.

Если у вас есть модуль, предназначенный для графики, и если этот модуль используется только через его интерфейсы, вы даже не сможете получить доступ к нему за пределами этого модуля. В этом случае вы будете использовать Использование (так сказать!) Внутри модуля, и поэтому было бы хорошо для понимания и сказать это, ваши пальцы тоже!