C# Bedeutung der Punkte im Namespace z.B. System.Abc.Xyz

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
759
Hallo zusammen,

kann mir jemand erklären, was es mit den Punkten im Namespace einer Klasse auf sich hat?

Z.B. System.Abc.Xyz.
Es gibt ja auch nur die Using Direktive System.

Beinhaltet die dann automatisch Alles mit System.*?

Oder handelt es sich hier nur um einen Namen, sodass man den Namespace auch statt System.Abc.Xyz --> SystemBlub nennen könnte?

Danke für die Info.

LG Ghost
 
System ist der Namespace, Abc eine Klasse in diesem Namespace.
Mit using System; gibst du an, diesen Namespace zu verwenden und mit Abc.Xyz(); nutzt du dann die Methode Xyz aus der Klasse Abc.
 
Die Punkte sind Zugriffe im Scope.

System.Abc.Xyz greift auf "Abc" in "System" zu, um dann auf "Xyz" in "Abc" zuzugreifen. Die durch Punkte getrennten Teile könnten theoretisch auch ganz anders heißen ja, aber nicht das gesamte Konstrukt als Einheit, da es eben nicht nur ein Name ist.
 
Danke für die Hinweise. Ich habe es eben parallel noch recherchiert und ein paar Tests gemacht. Es gibt wohl die Möglichkeit verschachtelte Namespaces zu erstellen. Dadurch entstehen diese Punkte. Also NS1.NS2
besagt, dass sich in Namespace1 ein weiterer Namespace, nämlich Namespace 2 befindet. Namespace 1 weiß dabei nichts von Namespace 2 (ohne Using-Directive), Namespace2 aber den von Namespace1, weil dieser innerhalb dieses Namespaces liegt.

Innerhalb einer Methode entspricht das dann am Ende natürlich einer Klasse bzw. dessen Methode, da habt Ihr natürlich recht, aber das hatte ich nicht gemeint :-) (aber auch nicht ideal erklärt)
 
Die Namespaces sind verzeichnisartig aufgebaut. Es gibt das große Verzeichnis "System", in dem Unterverzeichnisse wie "Windows", "Data" oder auch "IO" zu finden sind, die wiederum Unterverzeichnisse haben und in jedem Verzeichnis befinden sich dann die Klassen, enums, Interfaces, etc.

Statt wie bei einem Verzeichnis auf der Platte nun System\Windows\Media anzugeben, wird das bei den Namespaces eben mit . statt \ gemacht, also System.Windows.Media

using System beinhaltet erstmal nur alles was direkt im Namespace System liegt. Willst du auf ein Element aus System.Windows zugreifen, musst du entweder den vollen Namen angeben, zB System.Windows.MessageBox, oder eben using System.Windows hinzufügen, um dann im Code einfach nur noch MessageBox verwenden zu können, ohne Namespace davor.

Hintergrund dieser Verschachtelung ist unter anderem, dass es durchaus Namenskonflikte geben kann. So gibt es die Klasse "Point" beispielsweise mindestens 2x, einmal als System.Windows.Point und einmal als System.Drawing.Point - ganz zu schweigen davon, dass du ja selbst noch eine Klasse Point erstellen könntest. Bei potentiellen Namenskonflikten muss man daher stets den vollen Namen angeben, sofern die using-Direktiven mehrere Klassen desselben Namens finden.
 
  • Gefällt mir
Reaktionen: Autokiller677 und Ghost_Rider_R
Ghost_Rider_R schrieb:
Es gibt wohl die Möglichkeit verschachtelte Namespaces zu erstellen. Dadurch entstehen diese Punkte.
Jepp, genau das. Ein "using" Inkludiert dabei auch immer nur das was auf exakt dieser Ebene des Namespace liegt, nicht aber die ganzen Verschachtelten Namespaces. Deswegen sieht man dann meist auch sowas:

C#:
using System;
using System.IO;
using System.IO.Compression;
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
Zurück
Oben