Qualifizierte Namen in C# (Qualifizierte Namen in C#), Lektion, Seite 723387
https://www.purl.org/stefan_ram/pub/qualifizierte_namen_csharp (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs

Qualifizierte Namen in C♯ 

Das folgende Programm wurde schon behandelt. Seine Ausgabe ist der Wert des Wertnamens »global::System.Int32.MaxValue«.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( global::System.Int32.MaxValue ); }}
global::System.Console.Out
2147483647

Im folgenden sollen nun solche Namen, wie beispielsweise der Wertname »System.Int32.MaxValue«, näher beschrieben werden.

Qualifizierte Namen

Ein qualifizierter Name  ist ein Folge von Bezeichnern, die jeweils durch einen Punkt ».« miteinander verbunden sind. Ein qualifizierter Name muß also mindestens  einen Punkt enthalten.

Ein qualifizierter Name (Beispiel)
System.Int32.MaxValue

Namen

Ein Name  ist ein qualifizierter Name (ein Name mit  Punkt) oder  ein Bezeichner (ein Name ohne  Punkt). Namen dürfen also auch Punkte ».« enthalten, Bezeichner nicht.

Im Syntaxdiagramm wird der Aufbau eines Namens durch ein rekursives  Diagramm beschrieben.

Die Syntax von Namen
Name
.------. .-. .------------.
--->| Name |-->( . )--->| Bezeichner |--->
'------' '-' '------------'
Name
.------------.
--->| Bezeichner |--->
'------------'

Die Struktur eines qualifizierten Namens besteht darin, daß ein qualifizierter Name ein Bezeichner ist, vor dem noch ein durch einen Punkt abgetrennter Name steht. Der Punkt in qualifizierten Namen ist also linksassoziativ  zu verstehen.

Ein Name besteht also entweder aus einem Namen, einem Punkt ».« (oberes Syntaxdiagramm) und einem Bezeichner oder nur aus einem Bezeichner (unteres Syntaxdiagramm).

Der Name »System« ist nur ein einfacher Bezeichner (unteres Syntaxdiagramm).

Der Name »System.Int32« wird durch den Punkt in den Namen »System« einerseits und den Bezeichner »Int32« andererseits zerlegt (oberes Syntaxdiagramm).

Der Name »System.Int32.MaxValue« wird den rechtesten Punkt in den Namen »System.Int32« einerseits und den Bezeichner »MaxValue« andererseits zerlegt (oberes Syntaxdiagramm).

Bezeichner

Wir hatten den Begriff „Bezeichner“ ja schon in einer früheren Lektion definiert.

Ein Bezeichner kann in dieser Lektion hier nun auch als ein Name ohne Punkt  definiert werden. Man kann einen Bezeichner auch einen unqualifizierten Namen  oder einen nicht-qualifizierten Namen  nennen. Ein Bezeichner wird auch als einfacher Name  bezeichnet.

»global« »::«

Die C♯LS  erlaubt es, einem Namen auch noch die beiden lexikalischen Einheiten »global« »::« voranzustellen. Die Bedeutung dieses Vorsatzes, wird etwas später behandelt werden. Hier ist es nur wichtig, daß auch »global::System.Int32« immer noch wie ein Name verwendet werden kann. Die korrekte Fachbezeichnung dafür lautet “qualified alias member ”, wie bezeichnen solch einen solchen qualifizierten Aliaseintrag hier der Einfachheit halber ebenfalls als Namen. Dieser Name wird auch linksassoziativ gelesen, das heißt, daß »global::System« bereits ein Name ist, dem dann mit einem Punkt getrennt der Name »Int32« nachgestellt wird, wodurch sich der Name »global::System.Int32« ergibt. Dem kann dann mit einem Punkt wieder ein verfügbarer Bezeichner, wie »MaxValue« nachgestellt werden, um »global::System.Int32.MaxValue« zu erhalten.

Lexikalische Einheiten

Jeder Bezeichner und jeder Punkt in einem qualifizierten Namen stellt eine lexikalische Einheit  dar. (In einem Punktnumerale, wie »3.2« ist der Punkt aber keine lexikalische Einheit, sondern nur das gesamte Numerale.) Auch das Doppelpunktpaar »::« stellt eine lexikalische Einheit dar.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( global
::
System
.
Int32
.
MaxValue ); }}
global::System.Console.Out
2147483647
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( global :: System . Int32 . MaxValue ); }}
global::System.Console.Out
2147483647

Syntax von Ausdrücken

Wir können die Syntax von Ausdrücken nun um die Definition von Namen  erweitern. (Die darin verwendete Kategorie „Bezeichner“ wurde bereits in einer der früheren Lektionen durch ein Syntaxdiagramm beschrieben.)

Neue, erweiterte Syntax (vereinfacht)

Ausdruck
.----------.
---.----------->| Literal |---------------------------.---->
| '----------' |
| .---------------. |
'----------->| Aliaseintrag |----------------------'
| '---------------' |
| .-. .----------. |
'--->( - )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. |
'--->( + )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. .-. |
'--->( ( )-->| Ausdruck |-->( ) )-------------------'
| '-' '----------' '-' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( / )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( + )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( - )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( * )-->| Ausdruck |----'
'----------' '-' '----------'

Aliaseintrag
.-------------------------.
| .--------. .-. v .------.
---'--->| global |-->( : )---'--->| Name |--->
'--------' '-' '------'

Name
.-----------------------.
| .------. .-. v .------------.
---'--->| Name |-->( . )---'--->| Bezeichner |--->
'------' '-' '------------'

Übungsfragen

?   Namen

Welche der folgenden Texte sind Namen?

?   Qualifizierte Namen

Welcher der folgenden Namen ist einfach (also ein Bezeichner) und welcher ist ein qualifizierter Name?

?   Lexikalische Einheiten zählen

Wie viele lexikalische Einheiten umfassen die folgenden Ausdrücke jeweils?

Zitate *

CLS5
Members
Namespaces and types have members. The members of an entity are generally available through the use of a qualified name that starts with a reference to the entity, followed by a “.” token, followed by the name of the member.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723387 stefan_ram:723387 Qualifizierte Namen in C# Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723387, slrprddef723387, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/qualifizierte_namen_csharp