可以像在VB.NET中一样在C#中导入静态类吗?

5 c# vb.net import using

有没有办法在C#中"导入"静态类,比如System.Math

我已经包括了一个比较.

Imports System.Math

Module Module1

    Sub Main()
        Dim x As Double = Cos(3.14) ''This works
    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

VS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Math; //Cannot import a class like a namespace

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = Math.Cos(3.14);
            double y = Cos(3.14); //Cos does not exist in current context
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 9

更新:从C#6开始,答案现在是肯定的.


不,在C#中,您只能导入名称空间,而不能导入类.

但是,您可以给它一个更短的别名:

using M = System.Math;
Run Code Online (Sandbox Code Playgroud)

现在您可以使用别名而不是类名:

double y = M.Cos(3.14);
Run Code Online (Sandbox Code Playgroud)

但是要小心你如何使用它.大多数情况下,代码使用描述性名称更具可读性,Math而不是隐秘M.


另一个用途是从命名空间导入单个类,例如以避免类名之间的冲突:

using StringBuilder = System.Text.StringBuilder;
Run Code Online (Sandbox Code Playgroud)

现在只有命名空间中的StringBuilderSystem.Text可以直接使用.


u8i*_*8it 9

此问题的更新答案自C#6.0以来的YES,它提供了一个using static功能.因此,例如,using static System.Math;允许System.Math访问静态成员而无需将来对该Math类进行限定.

相关SO答案:
C#中的数学参考可以缩短吗?
如何使用C#6"使用静态"功能?

外部引用:
GitHub - C#6中的新语言特性
Intellitect - 在C#6.0中使用静态语句


Ces*_*Gon 5

没有.您需要在C#中显式调用方法作为类的功能.