代码之家  ›  专栏  ›  技术社区  ›  thisextendsthat

C系统名称空间-为什么需要导入它?

c#
  •  2
  • thisextendsthat  · 技术社区  · 6 年前

    在C中,如果我使用类似 string 而不是( System.String )那么我不需要添加 using System; 指令-它编译得很好。

    但是,如果我显式地将类型从别名更改为别名类型- 系统字符串 -如果没有 using 指令。这似乎适用于所有原始类型( int / Int32 , bool / Boolean 等)

    编译器为什么要导入 System 对于我,当使用别名时,而不是使用实际类型名时?

    3 回复  |  直到 6 年前
        1
  •  0
  •   Damien_The_Unbeliever    6 年前

    在每个文件的顶部,编译器都在插入别名

    using string = System.String;
    using int = System.Int32;
    using decimal = System.Decimal;
    

    等。

    我不相信编译器是这样实现的 内置别名,但这是总体效果。当你使用 using alias directives 你也不需要 using 为其封闭命名空间执行的指令,它不具有将其封闭命名空间拉入范围的效果。


    我在RoslynGithub存储库中的搜索foo让我失望了。

        2
  •  0
  •   Pete Kirkham    6 年前

    仅当不使用类型的完整限定名时才需要导入命名空间:

    namespace Test {
      class Cxx {
         public System.String _exampleField; 
      }
    }
    

    VS:

    using System;
    
    namespace Test {
      class Cxx {
         public String _exampleField; 
      }
    }
    

    可以使用别名从命名空间导入单个类型。

    内置别名的工作方式与您编写的别名类似; 如果不是内置别名 string 您有自己的名称空间,它们不需要导入整个系统名称空间:

    using mystring = System.String;
    
    namespace Test {
      class Cxx {
         public mystring _exampleField; 
      }
    }
    

    如果您使用的系统名称空间中只有具有别名的类型,则不需要导入。

    namespace Test {
      class Cxx {
         public string _exampleField; 
      }
    }
    
        3
  •  0
  •   Arunprasanth K V    6 年前

    两者几乎没有区别 string System.String 但仍然 String C关键字字符串映射到.NET类型 系统字符串 -它是一个别名,遵循语言的命名约定。

    阿尔索 一串 是关键字(在本例中是别名),而 是一种类型。

    注意:如果使用Visual Studio 2015或+并尝试使用 程序建议您“简化代码”,并将其携带到 一串

    这样你就可以避免System.String和Go-with-String的问题了。

    enter image description here