Les espaces de noms servent à regrouper du code lié et à éviter les conflits de noms ; on les trouve dans presque toutes les bases de code, à l'exception des plus triviales.
La syntaxe est la suivante :
namespace MyNameSpace
{
public class MyClass {}
public class OtherClass {}
}
Pour faire référence, en dehors de leur portée, à un type déclaré dans un espace de noms, on préfixe le nom de ce type par le nom de l'espace en question, suivi d'un point. Sinon, et c'est le cas le plus fréquent, on place une directive using en haut du fichier (ou dans un espace de noms), ce qui permet ensuite d'utiliser le type sans préfixe. Au sein d'un même espace de noms, il n'est pas nécessaire de qualifier les noms de types.
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();
}
}
}
On peut donner un alias à un espace de noms avec la syntaxe using MyAlias = MySpace;, puis utiliser cet alias partout où l'espace de noms peut être utilisé.
La direction commence à appliquer des principes darwiniens au projet de voiture télécommandée remote-control-competition. Les développeurs ont été répartis en deux équipes, Red et Blue, et ont pour mission d'améliorer la conception indépendamment l'une de l'autre. Ils n'ont pas à se soucier des décisions de conception de l'autre équipe.
On t'a demandé de jeter un œil au code et de voir comment combiner au mieux les deux efforts à des fins de test.
Utilise des namespaces pour mieux exprimer l'intention du code.
Pour l'instant, des types importants comme Motor et Telemetry, sans parler de RemoteControlCar lui-même, sont imbriqués dans une classe statique englobante, <Color>RemoteControlCarTeam. La seule raison d'être de la classe englobante est de permettre à des types portant le même nom de coexister dans le programme. Une meilleure façon d'exprimer cela est d'utiliser un espace de noms. Tu verras dans l'exercice suivant que, pour ces besoins, un namespace présente des avantages par rapport à une static class.
Bien que la direction tienne absolument à ce que les équipes s'appellent RedRemoteControlCarTeam et BlueRemoteControlCarTeam dans les définitions, ces noms sont assez encombrants lorsqu'on référence les équipes. Trouve un moyen d'utiliser les identifiants plus courts Red et Blue lors de la construction des voitures.
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.