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

8
有没有一种方法可以像 System.Math 一样“导入”C#中的静态类?
我提供了一个比较。
Imports System.Math

Module Module1

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

End Module

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
        }
    }
}

3
在C#中没有这样做的方式。我也希望有类似的东西。 (参考链接:http://codecrafter.blogspot.com/2009/09/c-static-classes-are-not-real-classes.html) - Jordão
截止到C# 6,答案现在是YES - ToolmakerSteve
5个回答

10

更新: 从C# 6开始,答案变成了 是


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

但是,您可以为其指定更短的别名:

using M = System.Math;

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

double y = M.Cos(3.14);

但是要注意使用方式。大多数情况下,使用像Math这样的描述性名称比使用晦涩的M更有可读性。


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

using StringBuilder = System.Text.StringBuilder;

现在只有来自System.Text命名空间的StringBuilder类是直接可用的。


9

5

没有。在C#中,您需要明确调用方法作为类的特性。


2

我在想,也许可以使用某种扩展方法?当然,这可以进行调整。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = Math.Cos(3.14);
            double y = 3.14;
            Console.WriteLine(y.Cos());
        }
    }

    public static class Extension
    {
        public static double Cos(this double d)
        {
            return Math.Cos(d);
        }
    }
}

0

从C# 6版本开始,可以使用以下语法导入静态类。

using static System.Console;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接