是否有一个隐藏的“使用”添加到C#类?

时间:2012-06-14 16:37:26

标签: c# .net enums

我的app中有一个Utils单元,截至目前,只定义了一些枚举,例如:

public enum MostFavoredStates
{
    California,
    NorthCarolina,
    Vermont,
    NewMexico
}

public enum LeastFavoredStates
{
    NorthDakota,
    Illinois,
    Nebraska
}

public enum StatesInWhichIHaveResided
{
        California,
        NewYork,
        Montana,
    Alaska,
        Oklahoma,
        Wisconsin,
        Idaho,
        Missouri
}

当我在我的项目上运行ReSharper时,它说我在这个课程中根本不需要“使用”语句;所以,我把它们全部删除了,瞧!它根本不需要任何东西。

“enum”必须在某处声明 - 如何在没有对该程序集或命名空间的引用的情况下生存?如果每个班级都有“烘焙”的东西,它是什么?

3 个答案:

答案 0 :(得分:12)

  

“enum”必须在某处声明 - 如何在没有对该程序集或命名空间的引用的情况下生存?如果每个班级都有“烘焙”的东西,它是什么?

“enum”是一个C#语言关键字。它不是需要解决的框架类型,因为它是语言本身的一部分。

请注意,还有许多其他语言关键字。例如,您可以int使用using System;而不使用System.Int32的使用条款,因为它已作为Int32的别名“加入”该语言 - 但您无法使用System.Int32 },因为那是{{1}}。

答案 1 :(得分:2)

在程序开始时,您永远不需要任何using语句;他们的整个存在是为了方便。

您可以随时为每个内联类型使用完全限定名称,并将对其进行解析。

System.Console.WriteLine(System.String.Empty);

上面的代码段编译得很好,没有任何using块。添加using System;的唯一好处是可以将上述代码缩短为:

Console.WriteLine(String.Empty);

现在,考虑到给定代码文件中通常使用某些名称空间的类型的次数,这往往是一个重大改进,因此很少使用完全限定名称。

类型别名(int,string,double,datetime等)映射到它们所代表的完全限定名称,而不仅仅是非限定名称,因此不依赖using System

答案 2 :(得分:0)

重要的是要注意C#“烘焙”类型(如int和string)只是.NET类型System.Int32和System.String的别名。

如果使用int或string,则不需要使用系统。

如果您正在尝试决定使用哪个(.NET类型或C#别名),以下SO问题可能有所帮助:

C#, int or Int32? Should I care?