通常命名空间是复数的,以免与类名冲突(例如,您可能希望名为Vehicle
and Car
)所以我倾向于使用命名空间,如下所示:
namespace Vehicles;
namespace Vehicles.Cars;
namespace Vehicles.Trucks;
至于类的名称,通常会在类名称前加上专门化前缀,特别是当它们可能一起使用时,因此您最终会得到类似以下内容的结果:
class CarWheel : Wheel
class TruckWheel : Wheel
您可以在 .NET Framework 中随处看到这种类型的“冗余”,例如在System.Xml
命名空间几乎所有类都带有前缀Xml
,或在System.Data.SqlClient
命名空间大多数类的前缀为Sql
。这意味着您可以使用以下命令导入命名空间using
指令,然后不必在整个代码中完全限定类名,例如以下哪项更具可读性?
Vehicles.Cars.Wheel wheel = new Vehicles.Cars.Wheel();
or
CarWheel wheel = new CarWheel();
很明显两者都在做什么,但第二个要短得多。
请注意,如果您确实在名称中包含专业化,那么您可能会发现不需要所有嵌套命名空间(.Cars
, .Trucks
等),如果它们通常一起使用,这会变得很痛苦,因此使用它们的每个文件都必须导入所有名称空间,例如
using Vehicles;
using Vehicles.Cars;
using Vehicles.Trucks;
using Vehicles.SomethingElse;
using Vehicles.YetAnotherThing;
如果你发现同样的堆栈using
指令位于每个文件的顶部,然后将类折叠到单个命名空间中。通常,您将预期在单个命名空间中一起使用的所有相关功能包含在内,并且仅将嵌套功能用于扩展基本命名空间但使用频率较低的功能。