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