Na MSDN mogę przeczytać, co robi, ale chciałbym wiedzieć, co to technicznie (mówi kompilator, gdzie szukać typów ..)? Mam na myśli używanie jako dyrektywy.Co dokładnie robi dyrektywa użytkowa?
Odpowiedz
Podstawową funkcją dyrektywy using
jest udostępnienie typów w obszarze nazw bez kwalifikacji do kodu użytkownika. Rozważa zestaw przestrzeni nazw i typów, które są zdefiniowane w zestawach referencyjnych i kompilowanym projekcie.
Weźmy na przykład następującą definicję w MyTypes.Dll
namespace MyTypes {
class Class1 {}
}
Rozważmy teraz przedstawieniu MyTypes.dll
z innego projektu z innej przestrzeni nazw. Bez korzystania dyrektywę stworzyć Class1
muszę zakwalifikować nazwą
MyTypes.Class1 local1 = new MyTypes.Class1();
Dyrektywa using
pozwala mi usunąć tę kwalifikację
using MyTypes;
...
Class1 local1 = new Class1();
using
informuje kompilator, które przestrzenie nazw mają wyszukiwać nazwy używane w pliku, ale nie zostały zdefiniowane w pliku.
@ odpowiedź JaredPar jest poprawne, jednak chciałbym dodać, że nie działa tak samo, jak w języku Java, powiedzmy import
. (Ktoś mnie poprawić jeśli się mylę Java import
faktycznie importowania go do pamięci)
Trzeba to albo DLL lub odwołanie projektu, aby jeszcze móc korzystać using
jednak nie jest ładowana do pamięci, aż faktycznie wywołać metodę/właściwość/coś w zespole. Więc możesz mieć using System.Linq;
, ale jeśli nie używasz żadnych metod Linq, zestaw Linq nigdy nie jest ładowany. (Nie jestem w 100% pozytywny, że Linq jest w swoim fizycznym zespole, ponieważ przestrzenie nazw i złożenia nie są w stosunku 1: 1, ale dla przykładu, zakładam, że tak jest)
użycie po prostu powiedz kompilatorowi, żeby ruszył do pliku konfiguracyjnego zespołu i wyszukaj konkretną bibliotekę DLL z podaną nazwą, jeśli biblioteka DLL zostanie znaleziona, wówczas łączy dll z bieżącym projektem. używanie jest po prostu operacją łączenia, aby DLL mógł komunikować się ze sobą we współużytkowanej przestrzeni w pamięci. Facet poniżej ma rację:
również, jeśli typ nie zostanie znaleziony w przestrzeni nazw aplikacji, kompilator przeszuka przestrzenie nazw zawarte za pomocą, prawda? – Loj
@Mojmi dla wspólnego przypadku tak. Wyszukiwanie nazw jest w rzeczywistości dość skomplikowane i nie komentowałem dokładnie, jak to działa ze względu na wysokie prawdopodobieństwo, że błędne informacje o zabawie będą dla mnie błędne. – JaredPar