一、命名空间的概念
-
概念:命名空间是用来组织和重用代码的
-
作用:命名空间像一个工具包,而类像一个个工具,都是声明在命名空间中的
二、命名空间的使用
- 语法:
namespace 命名空间名 {
类...
}
- 创建命名空间
cs
using System;
// 创建命名空间MyGame
namespace MyGame
{
class GameObject
{
}
}
namespace Namespace
{
static class Program
{
static void Main(string[] args)
{
}
}
}
- 命名空间与分布类类似,可以在不同位置写多个同名的命名空间,这些命名空间中的内容是共享的
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)
{
}
}
}
三、不同命名空间之间互相使用
-
条件:需要引用命名空间或指明出处
-
引用命名空间
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)语法:
命名空间名.类名
(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(); // 指明出处
}
}
}
四、使用不同命名空间
- 不同命名空间中允许有同名类
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(); // 指明出处
}
}
}
- 若引用了两个有相同类名的命名空间,必须使用指明出处的方式
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
}
}
}
五、命名空间可以包裹命名空间
- 创建命名空间
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
}
}
}
- 使用命名空间
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();
}
}
}
- 使用包裹的命名空间中的类时,若不指明出处,则必须引用包裹的命名空间
六、访问修饰符
-
public:内部程序集和外部程序集中都可以访问
-
internal(默认):只有内部程序集中可以访问
今天的学习就到这里了。感谢阅读。
再见!