第一个问题:这一句就是使用我们刚才创建的oop_demo类库里面的User类实例化一个名为user的对象,注意两个user的大小写不同的。
老田,如果每一次我们使用类库中的类都要写类库名字,那会不会太麻烦了?
首先要说明的是,我们使用的并不是类库名字,而是User类的命名空间,不过它们恰恰同名。至于什么是命名空间下面马上就会讲到,现在只要知道如果两个类之间的命名空间不同,如果要使用的话就都必须引入命名空间。不过上面也多次说到,引用还可以使用using关键字在类的顶部添加对某个命名空间的引用,注意到图4-13的第9句,有了这一句就可以在使用时直接写类名了,再不用在类名前加上命名空间了。
图4-13
知道了,可以用using来引入命名空间,而第11句 namespace UserManager 这个就是我们当前这个类的命名空间,假设在其它命名空间的类中要使用这个类的话,就必须引入该命名空间。引入后的代码则可以如下:
User user = new User(); //这里使用User类的时候就不需要再写明命名空间了 User user_a = new User();//同上 |
小天:命名空间是必须的吗?是否可以不使用呢?
老田:假设在没有多个项目搭配使用的前提下(放置功能的类和使用这些功能的类都在同一个项目中),命名空间确实有点多余。换句话说,是可以不用的。但是你想象以下情况:
1. 如同上面的例题这种情况,由多个项目配合。
2. N层架构(通常情况每一层都会单独建立一个项目)的程序
3. 在多个项目中有同名的类。在同一个命名空间下不允许同名的类,在项目中不使用命名空间也会被编译器认为是同一个命名空间;
在上述情况的时候命名空间是不是就有用了呢?命名空间的书面解释是:“它提供了一种分层方法来组织一个或多个程序的元素”;看个例题吧:
namespace Demo2 { public class Products { ...... } } namespace Demo3 { public class Products { ...... } } |
本来我明白了,看了这个例题我又不明白了,你上面直说了引入命名空间是用using,按照上面这个例题,我如果同时引入Demo2,Demo3这两个命名空间,但是下面我使用Products类的时候,系统还是知道我用的哪一个啊,难不成还是要全部写,那引入有什么用呢?
问得好,还是看个例题吧。
using D2 = Demo2; using D3 = Demo3;
namespace Demo1 { class Class1 { D2.Products dp2 = new Demo2.Products(); D3.Products dp3 = new Demo3.Products(); } } |
在上面例题中看到,我们为命名空间使用了别名。而在使用类的时候则使用别名.类名的方式。
小天:VS自动引入的那些命名空间是干嘛的?
老田:我们目前看到最多的可能要数 System.Windows.Forms 这个命名空间了,下表中显示了该命名空间中的类。
类的类别 |
详细信息 |
· 控件、用户控件和窗体 |
System.Windows.Forms命名空间中的大多数类都是从 Control 类派生的。Control类为在 Form 中显示的所有控件提供基本功能。Form类表示应用程序内的窗口。这包括对话框,无模式窗口和多文档界面 (MDI) 客户端窗口及父窗口。您也可以通过从 UserControl 类派生而创建自己的控件。 |
· 菜单和工具栏 |
Windows 窗体包含一组丰富的类,通过这些类,用户可以创建自定义工具栏和菜单,并使它们具有现代的外表和行为(外观和感受)。可以分别使用 ToolStrip、MenuStrip、ContextMenuStrip 和 StatusStrip 创建工具栏、菜单栏、上下文菜单以及状态栏。 |
· 控件 |
System.Windows.Forms命名空间提供各种控件类,使用这些控件类,可以创建丰富的用户界面。某些控件用于在应用程序内进行数据输入,比如 TextBox 和 ComboBox 控件。其他控件显示应用程序数据,比如 Label 和 ListView。此命名空间还提供用于在应用程序中调用命令的控件,如 Button。WebBrowser 控件和托管 HTML 类(如 HtmlDocument)使您可以在托管的 Windows 窗体应用程序中显示和操作 HTML 页面。MaskedTextBox 控件是一个高级数据输入控件,允许您定义可自动接受或拒绝用户输入的掩码。另外,您可以使用 PropertyGrid 控件创建自己的 Windows 窗体设计器,显示可在设计器中看见的控件属性。 |
· 布局 |
Windows 窗体中的若干重要类有助于控制显示图面(如窗体或控件)中控件的布局。FlowLayoutPanel 以序列方式布局其包含的所有控件,TableLayoutPanel 允许您定义单元格和行,以设置固定网格中控件的布局。SplitContainer 将显示图面分成两个或多个可调整的部分。 |
· 数据和数据绑定 |
Windows 窗体为与数据源(如数据库和 XML 文件)的绑定定义了丰富的架构。DataGridView 控件为显示数据提供了可自定义的表,允许您自定义单元格、行、列和边框。BindingNavigator 控件代表了在窗体上导航和使用数据的一种标准化方式;BindingNavigator通常与 BindingSource 控件一起使用,用于在窗体上的数据记录中移动并与这些数据进行交互。 |
· 组件 |
除控件之外,System.Windows.Forms命名空间还提供其他一些类,这些类不是从 Control类派生的,但仍然向基于 Windows 的应用程序提供可视化功能。某些类,例如 ToolTip 和 ErrorProvider,扩展了这些功能或者向用户提供信息。使用 Help 和 HelpProvider 类,可以向应用程序的用户显示帮助信息。 |
· 通用对话框 |
Windows 提供许多通用对话框,在执行诸如打开和保存文件、操作字体或文本颜色,或打印之类的任务时,这些通用对话框可使应用程序具有一致的用户界面。OpenFileDialog 和 SaveFileDialog类提供显示对话框的功能,以便允许用户定位和输入要打开或保存的文件的名称。FontDialog 类显示一个对话框,以更改应用程序所使用的 Font 的元素。PageSetupDialog、PrintPreviewDialog 和 PrintDialog类显示对话框,以便允许用户控制文档打印的各个方面。有关从基于 Windows 的应用程序打印的更多信息,请参见 System.Drawing.Printing 命名空间。除通用对话框外,System.Windows.Forms命名空间还提供 MessageBox 类,用于显示消息框,该消息框可以显示和检索用户提供的数据。 |
System.IO — 它包含的类型用于支持数据流和文件的同步和异步读写。
System.Text — 它包含表示 ASCII、Unicode、UTF-7 和 UTF-8 字符编码的类;用于来回转换字符块和字节块的抽象基类;以及在不创建 String 中间实例的情况下操作和格式化 String 对象的帮助器类。
System.Threading — 提供启用多线程编程的类和接口。此命名空间包括用于管理线程组的 ThreadPool 类、用于使委托可以在指定时间后被调用的 Timer 类,以及用于同步互斥线程的 Mutex 类。System.Threading 还提供用于线程调度和等待通知的类。
最大的一个是System,该命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。还有其他类提供的服务支持数据类型转换、方法参数操作、数学运算、远程和本地程序调用、应用程序环境管理和对托管与非托管应用程序的监控。
小天:明白了,不过我觉得如果命名空间如果不是很复杂的话,就懒得使用using引用了,直接用命名空间.类名了。 这个我懂了,继续说实例化吧,我还有点不明白。
本文章为天轰穿原创作品,转载请注明出处及作者。