Free mag vol1 | Page 564

CHAPTER 14  BUILDING AND CONFIGURING CLASS LIBRARIES namespace My3DShapes { // 3D Circle class. public class Circle { } // 3D Hexagon class. public class Hexagon { } // 3D Square class. public class Square { } } If you update the Program class as seen next, you are issued a number of co mpile-time errors, because both namespaces define identically named classes: // Ambiguities abound! using System; using MyShapes; using My3DShapes; namespace CustomNamespaces { public class Program { static void Main(string[] args) { // Which namespace do I reference? Hexagon h = new Hexagon(); // Compiler error! Circle c = new Circle(); // Compiler error! Square s = new Square(); // Compiler error! } } } The ambiguity can be resolved using the type’s fully qualified name, like so: // We have now resolved the ambiguity. static void Main(string[] args) { My3DShapes.Hexagon h = new My3DShapes.Hexagon(); My3DShapes.Circle c = new My3DShapes.Circle(); MyShapes.Square s = new MyShapes.Square(); } Resolving Name Clashes with Aliases The C# using keyword also lets you create an alias for a type’s fully qualified name. When you do so, you define a token that is substituted for the type’s full name at compile time. Defining aliases provides a second way to resolve name clashes. For example: using System; using MyShapes; 506