Namespaces sind eine Möglichkeit, zusammengehörigen Code zu gruppieren und Namenskonflikte zu vermeiden. In allen außer den trivialsten Codebasen sind sie eigentlich immer vorhanden.
Die Syntax sieht so aus:
namespace MyNameSpace
{
public class MyClass {}
public class OtherClass {}
}
Auf Typen, die in Namespaces eingeschlossen sind, verweist man außerhalb des Gültigkeitsbereichs des Namespace, indem man dem Typnamen die Punkt-Syntax voranstellt. Alternativ, und meistens üblicher, kannst du eine using-Direktive an den Anfang der Datei (oder in einen Namespace) setzen, und dann lässt sich der Typ ohne das Präfix verwenden. Innerhalb desselben Namespace musst du Typnamen nicht qualifizieren.
namespace MySpace
{
public class MyClass {}
public class Foo
{
public void Bar()
{
var baz = new MyClass();
}
}
}
public class Qux
{
public void Box()
{
var nux = new MySpace.MyClass();
}
}
namespace OtherSpace
{
using MySpace;
public class Tix
{
public void Jeg()
{
var lor = new MyClass();
}
}
}
Du kannst einen Namespace mit der Syntax using MyAlias = MySpace; mit einem Alias versehen und dann den Alias überall dort verwenden, wo der Namespace verwendet werden könnte.
Das Management beginnt, darwinistische Prinzipien auf das Projekt Remote Control Car remote-control-competition anzuwenden. Die Entwickler wurden in zwei Teams aufgeteilt, Red und Blue, und sollen das Design unabhängig voneinander verbessern. Sie müssen sich nicht mit den Designentscheidungen des anderen Teams befassen.
Du wurdest gebeten, einen Blick auf den Code zu werfen und zu schauen, wie du die beiden Bemühungen am besten zu Testzwecken zusammenführen kannst.
Bitte nutze namespaces, um die Absicht des Codes besser auszudrücken.
Derzeit sind wichtige Typen wie Motor und Telemetry, ganz zu schweigen von RemoteControlCar selbst, in eine umschließende statische Klasse <Color>RemoteControlCarTeam eingebettet. Der einzige Zweck der umschließenden Klasse ist es, Typen mit demselben Namen im Programm koexistieren zu lassen. Das drückt man besser mit einem Namespace aus. In der nächsten Übung wirst du sehen, dass ein namespace für diese Zwecke Vorteile gegenüber einer static class hat.
Auch wenn das Management darauf besteht, dass die Teams in den Definitionen RedRemoteControlCarTeam und BlueRemoteControlCarTeam heißen sollen, sind diese Namen beim Verweisen auf die Teams ziemlich sperrig. Finde einen Weg, die kürzeren Bezeichner Red und Blue zu verwenden, wenn du die Autos baust.
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.