C#学习之名称空间

来源:互联网 发布:大屏幕控制软件 bx 编辑:程序博客网 时间:2024/05/17 21:49

名称空间提供了一种组织相关类和其它类型的方式,它是一种逻辑组合,而不是物理组合。名称空间具有以下属性

(1)组织大型代码项目

(2)使用“.”运算符将它们分开

(3)using directive不必为每个类指定名称空间的名称。

(4) global命名空间是“根”命名空间:global::System始终引用.NET Framework命名空间System

把一个类型放在名称空间中,可以有效地给这个类型指定一个较长的名称,该名称包括类型的名称空间,名称之间用"."隔开,最后是类名。也可以在名称空间中嵌套其它名称空间,为类型创建层次结构.

给出我的练习示例:

Class1.cs

namespace myUtil{    namespace String    {        class Class1        {            public static void printInfo()            {                Console.WriteLine("namespace:myUtil.String   class:Class1\n");            }            public static string firstStrSplitByChar(string temp, char a)            {                string[] result = temp.Split(a);                return result[0];            }            public static string reverse(string temp)            {                char[] result = temp.ToArray();                result.Reverse();                return result.ToString();            }        }    }}
Class2.cs

namespace myUtil{    namespace math    {        class Class2        {            public static void printInfo2()            {                Console.WriteLine("namespace:myUtil.math class:Class2");            }            public static int add(int a, int b)            {                return a + b;            }            public static float add(float a,float b)            {                return a + b;            }        }    }}
Program.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using myUtil.math;using myUtil.String;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Class1.printInfo();            Class2.printInfo2();            Console.WriteLine("{0}", Class1.firstStrSplitByChar("hello-world", '-'));            Console.WriteLine("{0}", Class2.add(1, 2));        }    }}

在Class1.cs文件中,我们还可以将名称空间写为另一种形式,即namespace myUtil.String{ Your Code}的形式。 

需要注意的是不允许在另一个嵌套的名称空间中声明多部分的名称空间。

名称空间与程序集无关。同一个程序集中可以有不同的名称空间,也可以在不同的程序集中定义同一个名称空间的类型。

using语句

当名称空间相当长时,输入起来很繁琐,用using这种方式制定某个类是很有必要的。为此,在文件的顶部列出类的名称空间,前面加上using关键字。例如
using System;
using System.XML;
如果using语句引用的两个名称空间包含同名的类型,就必须使用完整的名称,确保编译器知道访问哪一个类型。例如上面的例子,在myUtil名称空间下有两个类Class1和Class2,但是在不同的名称空间下,所以要使用完整的名称,using myUtil.String和 using myUtil.math。

名称空间的别名

using关键字的另一个用途是给类和名称空间指定别名。如果名称空间的名称非常长,又要在代码中多次引用,但不希望该名称空间的名称包含在using指令中,就可以给该名称空间指定别名。例如:
using myString = myUtil.String;
一旦引用了名称空间的别名,就要在代码中使用名称空间别名修饰符”::“,因此将先从myString名称空间别名开始搜索。如果在相同的作用域中引入一个Class1类,就会发生冲突,即使出现冲突,”::“运算符也允许引用别名。例如:
using myString = myUtil.String;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            myString::Class1.printInfo();            Class2.printInfo2();            Console.WriteLine("{0}", myString::Class1.firstStrSplitByChar("hello-world", '-'));            Console.WriteLine("{0}", Class2.add(1, 2));            Console.ReadKey();        }    }}





0 0
原创粉丝点击