Announcement

Collapse
No announcement yet.

Was sind Namespaces genau?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Was sind Namespaces genau?

    Hallo!

    Ich würde gerne wissen was Namespaces sind, was sie machen und für was ich sie brauche bei der Programmierung mit dem .NET Framework

    mfg
    Franz

  • #2
    Hallo,

    ein Namespace ist eine logische Namenskonvention für das Abgrenzen von Klassen und sonstigen Typen, um die Gefahr von Kollisionen infolge mehrfach verwendeter und somit nicht mehr eindeutigen Bezeichner-Namen zu vermeiden. Die .NET-Klasse <i>MessageBox</i> wird zum Beispiel im Namespace <i>System.Windows.Forms</i> deklariert und implementiert. Zur Laufzeit greift die CLR immer nur über den vollständig qualifizierten Namen auf die Klasse zu, der aus den Bestandteilen Namespace-Name und Klassen-Name besteht. Wenn man im eigenen Programm einen Namespace importiert, darf der Namespace-Bestandteil beim Aufruf weggelassen werden:

    1. Weg (Qualifizierter Name): System.Windows.Forms.MessageBox.Show('Test');<br>
    2. Weg (Abgekürzter Name): MessageBox.Show('Test');

    Während die Namespaces ihre Wirkung zur Compilierungszeit entfalten, greifen im Gegensatz dazu die Assemblies erst zur Laufzeit. Denn für .NET legen zur Laufzeit nur die Assemblies die Sichtbarkeit von Typen fest

    Comment


    • #3
      Hallo,

      hier vielleicht noch ein kleines praktisches Beispiel:
      Beachtenswert ist die Funktion ambigous() die Zweimal mit
      der gleichen Signatur(Struktur der Funktion) deklariert ist.
      <pre>
      // created on 20.12.2002 at 12:48
      using System;
      using System.Windows.Forms;
      //Das sind die selber definierten Namensbereiche
      using mainspace.one;
      using mainspace.two;

      namespace mainspace{

      public class main{
      public static void Main(){

      ambiguousone.ambiguous();
      ambiguousone.ambiguous();

      }


      }


      namespace one{

      public class ambiguousone{

      public static void ambiguous(){

      MessageBox.Show("Ich komme aus der Klasse ambiguousone\nim Namespace one!");
      }
      }
      }

      namespace two{

      public class ambiguousone{

      public static void ambiguous(){

      MessageBox.Show("Ich komme aus der Klasse ambiguousone\nim Namespace two!");
      }
      }
      }
      }

      </pre>

      Der aufruf der funktion in diesem fall führt zu einer Kompilermeldung die besagt:<br>
      error CS0104: 'ambiguousone' ist ein mehrdeutiger Verweis
      <br>
      Dieses geschieht weil wir die Namensbereiche mit der using Direktive
      für den gesammten Code sichtbar machen wollen. Der Versuch dann eine statische Methode der Klassen ambiguousone aufzurufen(mit dem gleichen Namen und der Signatur) schlägt fehl. Was benötigt wird ist eine volle Referenz auf die Klassen und um eine "Doppeldeutigkeit" zu vermeiden:<br>
      <pre>
      // created on 20.12.2002 at 12:48
      using System;
      using System.Windows.Forms;

      namespace mainspace{

      public class main{
      public static void Main(){

      mainspace.one.ambiguousone.ambiguous();
      mainspace.two.ambiguousone.ambiguous();

      }


      }


      namespace one{

      public class ambiguousone{

      public static void ambiguous(){

      MessageBox.Show("Ich komme aus der Klasse ambiguousone\nim Namespace one!");
      }
      }
      }

      namespace two{

      public class ambiguousone{

      public static void ambiguous(){

      MessageBox.Show("Ich komme aus der Klasse ambiguousone\nim Namespace two!");
      }
      }
      }
      }

      </pre>
      <br>

      Gruß Ke

      Comment

      Working...
      X