23.面向对象关联知识点-命名空间
23.1 知识点
命名空间的基本概念
命名空间是用来组织和重用代码的。它类似于一个工具包,其中的类就像工具一样,都是声明在命名空间中的。
命名空间的使用
任何语句块外
// 基本语法
// namespace 命名空间名
// {
// 类
// 类
// }
// 实例
namespace MyGame
{
class GameObject
{
}
}
// 同名类,但在不同命名空间中
namespace MyGame
{
class Player : GameObject
{
}
}
namespace YouGame
{
class Player : GameObject
{
}
不同命名空间中相互使用,需要引用命名空间或指明出处
代码最前面
// 引用MyGame命名空间
// 能在namespace Lesson21_面向对象相关_命名空间 使用MyGame命名空间相关的类
using System;
using MyGame;
主函数内
// 引用MyGame命名空间
// 能在namespace Lesson21_面向对象相关_命名空间 使用MyGame命名空间的GameObject类
GameObject gameObject1 = new GameObject();
// 不引用MyGame命名空间,又想使用MyGame命名空间的GameObject类
// 需要遵循命名空间.类名的语法,在GameObject前加上MyGame.
MyGame.GameObject gameObject2 = new GameObject();
不同命名空间中允许有同名类
任何语句块外
// 申明MyGame2命名空间,再申明GameObject类
// 就算MyGame里也有GameObject类,也不会报错
namespace MyGame2
{
// 在不同的命名空间中是可以有同名类的
class GameObject
{
}
}
主函数内
// 同时引用了MyGame命名空间和MyGame2命名空间
// 直接使用GameObject类会报错
// 因为MyGame命名空间和MyGame2命名空间里都有GameObject类
// 分不清楚用的是哪个命名空间的类
// 这个时候又要指明出处
// 遵循命名空间.类名的语法
// MyGame.GameObject MyGame2.GameObject 来区分
命名空间可以包裹命名空间
任何语句块外
// 类比内部类来学习
// 大命名空间
namespace MyGame
{
// 内部可以有小命名空间
namespace UI
{
class Image
{
}
}
namespace Game
{
class Image
{
}
}
}
代码最前面
// 不引用MyGame.UI,只引用MyGame
// 不能直接使用MyGame.UI里的类,要逐个命名空间点出来
using MyGame.UI;
主函数内
// 引用MyGame.UI,能直接使用MyGame.UI里的Image类
Image img1 = new Image();
// 不引用MyGame.UI,只引用MyGame
// 不能直接使用MyGame.UI里的Image类,要逐个命名空间点出来
MyGame.UI.Image img2 = new MyGame.UI.Image();
// MyGame.Game中的同理
MyGame.Game.Image img3 = new MyGame.Game.Image();
关于修饰类的访问修饰符
public
—— 公有类protected
—— 继承类,在继承链上的类里面都可以使用internal
—— 程序集中的类,默认为internal,只能在相同程序集中使用,即在同一个项目中的任何代码中都可以调用,包括继承链上的类,不在继承链上的类除外。protected internal
—— 程序集中的和继承类。protected
和internal
能使用的地方都能使用。protected internal
修饰的成员可以跨程序集(或者说跨项目)被调用,只要在另一个项目中声明一个属于继承链上的类就可以调用被protected internal
修饰的成员(但是在另一个项目的别的地方不能调用)。abstract
—— 抽象类sealed
—— 密封类partial
—— 分部类
总结
- 命名空间是个工具包,用来管理类。
- 不同命名空间中可以有同名类。
- 不同命名空间中相互使用需要使用
using
引用命名空间或者指明出处。 - 命名空间可以包裹命名空间。
23.2 知识点代码
//代码最前面
#region 知识点三 不同命名空间中相互使用 需要引用命名空间或指明出处
//引用MyGame命名空间
//能在namespace Lesson21_面向对象相关_命名空间 使用MyGame命名空间相关的类
using System;
using MyGame;
#endregion
#region 知识点五 命名空间可以包裹命名空间
//不引用MyGame.UI只引用yGame 不能直接使用MyGame.UI里的类 要逐个命名空间点出来
using MyGame.UI;
#endregion
//任何语句块外
#region 知识点一 命名空间的基本概念
//概念:命名空间是用来组织和重用代码的
//作用:就像是一个工具包,类就像是一件一件的工具,都是申明在命名空间中的
#endregion
#region 知识点二 命名空间的使用
//基本语法
//namespace 命名空间名
//{
// 类
// 类
//}
//实例
namespace MyGame
{
class GameObject
{
}
}
//可以是同名的 类似于类中的分布类
namespace MyGame
{
//报错 同一个命名空间不能有同名类
//class GameObject
//{
//}
class Player:GameObject
{
}
}
namespace YouGame
{
class Player : GameObject
{
}
}
#endregion
#region 知识点四 不同命名空间中允许有同名类
//申明MyGame2命名空间 再申明GameObject类 就算MyGame里也有GameObject类 也不会报错
namespace MyGame2
{
//在不同的命名空间中 是可以有同名类的
class GameObject
{
}
}
#endregion
#region 知识点五 命名空间可以包裹命名空间
//类比内部类来学习
//大命名空间
namespace MyGame
{
//内部可以有小命名空间
namespace UI
{
class Image
{
}
}
namespace Game
{
class Image
{
}
}
}
#endregion
#region 知识点六 关于修饰类的访问修饰符
//public —— 公有类
//protected —— 继承类 在继承链上的类里面都可以使用
//internal —— 程序集中的类 默认为internal
//只能在相同程序集中可以使用,换句话说就是在同一个项目中的任何代码中都可以调用,包括继承链上的类,不在继承链上的类,但出了项目就没办法使用了。
//protected internal ———— 程序集中的和继承类protected和internal能使用的地方都能使用
//protected internal修饰的成员可以跨程序集(或者说跨项目)被调用
//只要在另一个项目中声明一个属于继承链上的类就可以调用被protected internal修饰的成员(但是在另一个项目的别的地方不能调用)。
//abstract —— 抽象类
//sealed —— 密封类
//partial —— 分部类
#endregion
namespace Lesson21_面向对象相关_命名空间
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("命名空间");
//主函数内
#region 知识点三 不同命名空间中相互使用 需要引用命名空间或指明出处
//引用MyGame命名空间
//能在namespace Lesson21_面向对象相关_命名空间 使用MyGame命名空间的GameObject类
GameObject gameObject1 = new GameObject();
//不引用MyGame命名空间 又想使用MyGame命名空间的GameObject类
//需要遵循 命名空间.类名的语法 在GameObject前加上MyGame.
MyGame.GameObject gameObject2 = new GameObject();
#endregion
#region 知识点四 不同命名空间中允许有同名类
//假如同时引用了MyGame命名空间和MyGame2命名空间
//直接使用GameObject类会报错
//因为MyGame命名空间和MyGame2命名空间里都有GameObject类
//分不清楚用的是哪个命名空间的类
//这个时候又要指明出处
//遵循 命名空间.类名的语法
//MyGame.GameObject MyGame2.GameObject 来区分
#endregion
#region 知识点五 命名空间可以包裹命名空间
//引用MyGame.UI 能直接使用MyGame.UI里的Image类
Image img1 = new Image();
//不引用MyGame.UI只引用yGame 不能直接使用MyGame.UI里的Image类 要逐个命名空间点出来
MyGame.UI.Image img2 = new MyGame.UI.Image();
//MyGame.Game中的同理
MyGame.Game.Image img3 = new MyGame.Game.Image();
#endregion
}
}
}
//总结
//1.命名空间是个工具包 用来管理类的
//2.不同命名空间中 可以有同名类
//3.不同命名空间中相互使用 需要using引用命名空间 或者 指明出处
//4.命名空间可以包裹命名空间
23.3 练习题
请说明关键词using有什么作用
using
关键字在 C# 中有两种主要用途:
引用命名空间:using
用于引用命名空间,以便在代码中可以直接使用该命名空间中的类型,而无需使用完全限定名。
资源管理:using
还用于管理资源,例如文件、数据库连接、网络流等,通过在using
代码块结束时自动释放资源,确保资源的正确释放。
有两个命名空间,UI(用户界面)和Graph(图表),两个命名空间中都有一个Image类,请在主函数中实例化两个不同命名空间中的Image对象
任何语句块外
// 命名空间 UI
namespace UI
{
class Image
{
}
}
// 命名空间 Graph
namespace Graph
{
class Image
{
}
}
代码最前面
// 引用两个自己写的命名空间
using System;
using UI;
using Graph;
主函数内
// 主函数内
// 引用两个自己写的命名空间后 要逐个点出Image类 否则报错 不知道引用的哪个命名空间的类
UI.Image uiImg = new UI.Image();
Graph.Image grImg = new Graph.Image();
这样,通过使用 using
关键字,可以更方便地在主函数中实例化两个不同命名空间中的 Image
对象。
23.4 练习题代码
//代码最前面
#region 练习题二
//引用两个自己写的命名空间
using System;
using UI;
using Graph;
#endregion
#region 练习题一
//请说明关键词using有什么作用
//using是用来引用命名空间 引用命名空间才能使用命名空间内的内容
#endregion
//任何语句块外
#region 练习题二
//有两个命名空间,UI(用户界面)和Graph(图表)
//两个命名空间中都有一个Image类
//请在主函数中实例化两个不同命名空间中的Image对象
//声明两个空间 里面都有Image类
namespace UI
{
class Image
{
}
}
namespace Graph
{
class Image
{
}
}
#endregion
namespace Lesson21_练习题
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("命名空间练习题");
//主函数内
#region 练习题二
//引用两个自己写的命名空间后 要逐个点出Image类 否则报错 不知道引用的哪个命名空间的类
UI.Image uiImg = new UI.Image();
Graph.Image grImg = new Graph.Image();
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com