📜  C#|命名空间

📅  最后修改于: 2021-05-29 20:15:28             🧑  作者: Mango

命名空间用于组织类。它有助于控制较大的.Net编程项目中方法和类的范围。用简单的话来说,您可以说它提供了一种使一组名称(如类名)与其他名称集保持不同的方法。使用名称空间的最大优点是,在一个名称空间中声明的类名不会与在另一名称空间中声明的相同类名冲突。它也被称为具有共同特征的命名类组。名称空间的成员可以是名称空间,接口,结构和委托。

定义命名空间

要在C#中定义一个名称空间,我们将使用namespace关键字,后跟该名称空间的名称和包含该名称空间主体的花括号,如下所示:

句法:

namespace name_of_namespace {

// Namespace (Nested Namespaces)
// Classes
// Interfaces
// Structures
// Delegates

}

例子:

// defining the namespace name1
namespace name1 
{

    // C1 is the class in the namespace name1
    class C1
    {
         // class code
    }
}

访问命名空间的成员

可以使用dot(。)运算符访问名称空间的成员。 C#中的一个类通过其各自的名称空间是完全已知的。

句法:

[namespace_name].[member_name]

笔记:

  • 可以在一个程序中的2个不同的名称空间中创建两个具有相同名称的类。
  • 在名称空间内,任何两个类都不能具有相同的名称。
  • 在C#中,类的全名始于其名称空间名称,后跟dot(。)运算符和类名,这被称为类的全限定名。

例子:

// C# program to illustrate the 
// use of namespaces
  
// namespace declaration
namespace first {
      
    // name_1 namespace members
    // i.e. class
    class Geeks_1 
    {
          
        // function of class Geeks_1
        public static void display()
        {
            // Here System is the namespace
            // under which Console class is defined
            // You can avoid writing System with 
            // the help of "using" keyword discussed
            // later in this article
            System.Console.WriteLine("Hello Geeks!");
  
        }
    }
      
      
    /* Removing comment will give the error
       because no two classes can have the 
       same name under a single namespace
      
    class Geeks_1
    {
          
    }       */
      
      
} // ending of first namespace
  
  
// Class declaration
class Geeks_2
{
      
    // Main Method
    public static void Main(String []args)
    {
          
        // calling the display method of 
        // class Geeks_1 by using two dot
        // operator as one is use to access 
        // the class of first namespace and 
        // another is use to access the 
        // static method of class Geeks_1.
        // Termed as fully qualified name 
        first.Geeks_1.display();        
          
    } 
}

输出:

Hello Geeks!

在上面的示例中:

  • System.Console.WriteLine()中,System ”是一个命名空间,其中我们有一个名为“ Console ”的类,其方法为“ WriteLine() ”。
  • 不必将每个类都保留在命名空间中的C#中,但是我们这样做是为了很好地组织我们的代码。
  • 在这里 ”是用于分隔名称空间中的类名和函数名称与类名的分隔符。

using关键字

每次使用其完全限定的名称来调用函数或类(或者可以说是命名空间的成员)实际上是不实际的。在上面的示例中, System.Console.WriteLine(“ Hello Geeks!”);first.Geeks_1.display();是完全限定的名称。因此,C#提供了一个关键字“ using ”,它可以帮助用户避免一次又一次地编写完全限定的名称。用户仅需在程序启动时提及名称空间名称,即可轻松避免使用完全限定的名称。

句法:

using [namespace_name][.][sub-namespace_name];

在以上语法中,点(。)用于在程序中包含子命名空间名称。

例子:

// predefined namespace name
using System;

// user-defined namespace name
using name1

// namespace having subnamespace
using System.Collections.Generic;

程序:

// C# program to illustrate the 
// use of using keyword
  
// predefined namespace
using System;
  
// user defined namespace
using first;
  
// namespace declaration
namespace first {
      
    // name_1 namespace members
    // i.e. class
    class Geeks_1 
    {
          
        // function of class Geeks_1
        public static void display()
        {
            // No need to write fully qualified name
            // as we have used "using System"
            Console.WriteLine("Hello Geeks!");
          
        }
    }
      
      
} // ending of first namespace
  
  
// Class declaration
class Geeks_2
{
      
    // Main Method
    public static void Main(String []args)
    {
          
        // calling the display method of 
        // class Geeks_1 by using only one 
        // dot operator as display is the 
        // static method of class Geeks_1
        Geeks_1.display();
                 
    } 
}

输出:

Hello Geeks!

嵌套命名空间

您还可以将一个名称空间定义到另一个名称空间中,该名称空间称为嵌套名称空间。要访问嵌套名称空间的成员,用户必须使用dot(。)运算符。

例如, Generic集合名称空间中作为System.Collections.Generic的嵌套名称空间。

句法:

namespace name_of_namespace_1 
{
   
   // Member declarations & definitions
   namespace name_of_namespace_2 
   {

        // Member declarations & definitions
        .
        .

   }
}

程序:

// C# program to illustrate use of 
// nested namespace
using System;
  
// You can also use 
// using Main_name.Nest_name;
// to avoid the use of fully 
// qualified name 
  
// main namespace
namespace Main_name
{            
      
    // nested namespace
    namespace Nest_name
    {
          
        // class within nested namespace      
        class Geeks_1
         {
               
              // Constructor of nested
              // namespace class Geeks_1
              public Geeks_1() { 
                    
                  Console.WriteLine("Nested Namespace Constructor");
                    
              }
        }   
    }                                                    
}
  
// Driver Class
class Driver 
{
      
    // Main Method
    public static void Main(string[] args)
    {
          
        // accessing the Nested Namespace by
        // using fully qualified name
        // "new" is used as Geeks_1() 
        // is the Constructor  
        new Main_name.Nest_name.Geeks_1();
          
    }    
}

输出:

Nested Namespace Constructor