2013-11-16 5 views
2

У меня есть класс в моей программе, что я всегда иметь доступ к так:Использовать класс внутри другого класса?

Blah.Blah.Blah.DoSomething(); 

И я хочу, чтобы иметь возможность получить доступ к DoSomething() без необходимости вводить все это каждый раз. using Blah; не собирался компилироваться и в любом случае не появлялся бы в Intellisense Visual Studio. Как я могу это сделать?

+1

Попробуйте использовать MyBlah = Blah.Blah.Blah; '. Или, вы знаете, не злоупотребляйте вложенными классами - для чего нужны пространства имен. – millimoose

+0

Один из способов избежать этого - не использовать вложенные классы. –

+1

Вздох, все эти «это не сработало», вопросы делают для просмотра бла-бла. –

ответ

6

Попробуйте это;

using blah = blah.blah.blah; 
+0

Обратите внимание, что это будет работать, только если 'Blah.Blah.Blah' является классом, если это статическое свойство или поле [оно не будет работать] (http://ideone.com/pp3lrH). –

1

Вы можете использовать директивы using только для пространств имен. Вы можете думать о пространствах имен, подобных папкам, для организации классов. Например, класс Console живет в пространстве имен System. Таким образом, вы можете либо получить доступ к нему с помощью System.Console, либо с помощью using System; ... Console.

Вы можете использовать директивы using только для пространств имен, а не для классов. В вашем примере DoSomething является методом класса Blah. Запись только DoSomething не работает, потому что компилятор не знает, какую функцию вы ищете. Также иногда возникают большие цепочки, например, в вашем примере при доступе к свойствам свойств. Представьте, у меня есть класс Color с R, G и значением B. Теперь у меня есть Pixel Class, который также сохраняет объект типа Color. Поэтому, чтобы получить значение R такого пикселя, я мог бы использовать Pixel.Color.R. В этом случае невозможно использовать using s, поскольку ни Pixel, ни Color не является пространством имен.

Редактировать: Как указывает Скотт, вы действительно можете использовать инструкцию для классов. Смотри ниже.

+1

[Вы уверены, что используете 'using' только в пространствах имен] (http://ideone.com/ZVvuwM)? Вы можете использовать их на классах просто отлично, вам просто нужно обращаться с ними, как с любым другим типом. Также для вашего пиксельного примера вы можете сделать Pixel pixel = new Pixel(); Цвет pixelColor = pixel.Color; int r = pixelColor.R; 'просто отлично. –

+0

Конечно, вы можете извлечь цвет из пикселя и сохранить его отдельно. Но я пытался найти пример со многими точками;) Для «использования» на классах я не знал этого, спасибо за головы. Но все же вы не можете, например, написать 'using Int32; ', а затем просто вызвать' ToString(); 'в коде. «Использование X = Y» создает нечто вроде «псевдонима», тогда как «использование NAMESPACE» устраняет необходимость полностью выписывать пространство имен, к чему я стремился. – ChrisK

+0

Да, я согласен, вам понадобится хотя бы одна точка. Лучшее, что вы можете сделать, это включить его в 'Alias.StaticFunctionName()'. –

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