zoukankan      html  css  js  c++  java
  • .天轰穿C# vs2010 04面向对象的编程之命名空间【原创】

    第一个问题:这一句就是使用我们刚才创建的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 窗体包含一组丰富的类,通过这些类,用户可以创建自定义工具栏和菜单,并使它们具有现代的外表和行为(外观和感受)。可以分别使用 ToolStripMenuStripContextMenuStrip StatusStrip 创建工具栏、菜单栏、上下文菜单以及状态栏。

    ·         控件

    System.Windows.Forms命名空间提供各种控件类,使用这些控件类,可以创建丰富的用户界面。某些控件用于在应用程序内进行数据输入,比如 TextBox ComboBox 控件。其他控件显示应用程序数据,比如 Label ListView。此命名空间还提供用于在应用程序中调用命令的控件,如 ButtonWebBrowser 控件和托管 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 的元素。PageSetupDialogPrintPreviewDialog PrintDialog类显示对话框,以便允许用户控制文档打印的各个方面。有关从基于 Windows 的应用程序打印的更多信息,请参见 System.Drawing.Printing 命名空间。除通用对话框外,System.Windows.Forms命名空间还提供 MessageBox 类,用于显示消息框,该消息框可以显示和检索用户提供的数据。

    System.IO — 它包含的类型用于支持数据流和文件的同步和异步读写。

    System.Text — 它包含表示 ASCIIUnicodeUTF-7 UTF-8 字符编码的类;用于来回转换字符块和字节块的抽象基类;以及在不创建 String 中间实例的情况下操作和格式化 String 对象的帮助器类。

    System.Threading — 提供启用多线程编程的类和接口。此命名空间包括用于管理线程组的 ThreadPool 类、用于使委托可以在指定时间后被调用的 Timer 类,以及用于同步互斥线程的 Mutex 类。System.Threading 还提供用于线程调度和等待通知的类。

    最大的一个是System,该命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。还有其他类提供的服务支持数据类型转换、方法参数操作、数学运算、远程和本地程序调用、应用程序环境管理和对托管与非托管应用程序的监控。

    小天:明白了,不过我觉得如果命名空间如果不是很复杂的话,就懒得使用using引用了,直接用命名空间.类名了。 这个我懂了,继续说实例化吧,我还有点不明白。

    本文章为天轰穿原创作品,转载请注明出处及作者。 

  • 相关阅读:
    TCP11种状态
    多客户连接僵尸进程的处理
    gethostname(获取主机名)、gethostbyname(由主机名获取IP地址)
    点对点通信实例
    XCTF simple js
    XCTF WEB backup
    bugku SKCTF管理系统
    php漏洞 sha1函数
    bugku--速度要快
    bugku秋名山车神
  • 原文地址:https://www.cnblogs.com/thcjp/p/2823123.html
Copyright © 2011-2022 走看看