【C#补全计划】命名空间

一、命名空间的概念

  1. 概念:命名空间是用来组织和重用代码的

  2. 作用:命名空间像一个工具包,而类像一个个工具,都是声明在命名空间中的

二、命名空间的使用

  1. 语法:

namespace 命名空间名 {

类...

}

  1. 创建命名空间
cs 复制代码
using System;

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			
		}
	}
}
  1. 命名空间与分布类类似,可以在不同位置写多个同名的命名空间,这些命名空间中的内容是共享的
cs 复制代码
using System;

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	class Player : GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			
		}
	}
}

三、不同命名空间之间互相使用

  1. 条件:需要引用命名空间或指明出处

  2. 引用命名空间

cs 复制代码
using System;
using MyGame; // 引入命名空间

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	class Player : GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			GameObject gameObject = new GameObject();
		}
	}
}
  1. 指明出处

(1)语法:

命名空间名.类名

(2)代码:

cs 复制代码
using System;

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	class Player : GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			MyGame.GameObject gameObject = new MyGame.GameObject(); // 指明出处
		}
	}
}

四、使用不同命名空间

  1. 不同命名空间中允许有同名类
cs 复制代码
using System;

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	class Player : GameObject
	{
	}
}

// 创建命名空间TestGame, 可以与MyGame中的类同名
namespace TestGame
{
	class GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			MyGame.GameObject gameObject = new MyGame.GameObject(); // 指明出处
		}
	}
}
  1. 若引用了两个有相同类名的命名空间,必须使用指明出处的方式
cs 复制代码
using System;
using MyGame;
using TestGame;

// 创建命名空间MyGame
namespace MyGame
{
	class GameObject
	{
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	class Player : GameObject
	{
	}
}

// 创建命名空间TestGame, 可以与MyGame中的类同名
namespace TestGame
{
	class GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			// GameObject gameObject = new GameObject(); // 编译报错
			TestGame.GameObject gameObject = new TestGame.GameObject(); // 指明出处, 使用TestGame中的GameObject
		}
	}
}

五、命名空间可以包裹命名空间

  1. 创建命名空间
cs 复制代码
using System;
using MyGame;
using TestGame;

// 创建命名空间MyGame
namespace MyGame
{
	// 命名空间可以包裹命名空间
	namespace Game
	{
		class GameObject
		{
		}

		class Image
		{
		}
	}

	namespace UI
	{
		class Button
		{
		}

		class Image // 可以与MyGame.Game.Image同名
		{
		}
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	namespace Game
	{
		class Player : GameObject
		{
		}
	}
}

// 创建命名空间TestGame, 可以与MyGame中的类同名
namespace TestGame
{
	class GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			// GameObject gameObject = new GameObject(); // 编译报错
			TestGame.GameObject gameObject = new TestGame.GameObject(); // 指明出处, 使用TestGame中的GameObject
		}
	}
}
  1. 使用命名空间
cs 复制代码
using System;
using MyGame;
using TestGame;

// 创建命名空间MyGame
namespace MyGame
{
	// 命名空间可以包裹命名空间
	namespace Game
	{
		class GameObject
		{
		}

		class Image
		{
		}
	}

	namespace UI
	{
		class Button
		{
		}

		class Image // 可以与MyGame.Game.Image同名
		{
		}
	}
}

// 在另一个地方创建同名命名空间MyGame,可以访问同名命名空间中的类A
namespace MyGame
{
	namespace Game
	{
		class Player : GameObject
		{
		}
	}
}

// 创建命名空间TestGame, 可以与MyGame中的类同名
namespace TestGame
{
	class GameObject
	{
	}
}

namespace Namespace
{
	static class Program
	{
		static void Main(string[] args)
		{
			// GameObject gameObject = new GameObject(); // 编译报错
			TestGame.GameObject gameObject = new TestGame.GameObject(); // 指明出处, 使用TestGame中的GameObject

			// 使用命名空间包裹的命名空间
			MyGame.Game.GameObject gameObject2 = new MyGame.Game.GameObject();
		}
	}
}
  1. 使用包裹的命名空间中的类时,若不指明出处,则必须引用包裹的命名空间

六、访问修饰符

  1. public:内部程序集和外部程序集中都可以访问

  2. internal(默认):只有内部程序集中可以访问

今天的学习就到这里了。感谢阅读。

再见!