【问题标题】:static imports in c#c#中的静态导入
【发布时间】:2011-12-03 07:37:00
【问题描述】:

C# 是否具有类似于 Java 的静态导入的功能?

所以不要像

那样写代码
FileHelper.ExtractSimpleFileName(file)

我会写

ExtractSimpleFileName(file)

编译器会知道我的意思是来自 FileHelper 的方法。

【问题讨论】:

标签: java c# .net static-import


【解决方案1】:

从 C# 6.0 开始,这是可能的:

using static FileHelper;

// in a member
ExtractSimpleFileName(file)

但是,以前的 C# 版本没有静态导入。

您可以使用该类型的别名来接近。

using FH = namespace.FileHelper;

// in a member
FH.ExtractSimpleFileName(file)

或者,将静态方法更改为类型上的extension method - 然后您可以将其称为:

var value = file.ExtractSimpleFileName();

【讨论】:

    【解决方案2】:

    Roslyn 平台 supports Static import 下的 C# 6.0。它需要如下声明:

    using static System.Console;
    

    所以代码可能如下所示:

    using static System.Console;
    namespace TestApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                WriteLine("My test message");
            }
        }
    }
    

    C# 6.0 的早期计划版本有静态导入 没有 static 关键字。

    有关 C# 6.0 中的其他新功能,请参阅:New Language Features in C# 6

    【讨论】:

      【解决方案3】:

      时间在流逝……看起来 C# 可能会在下一个版本中获得静态导入,请参阅 http://msdn.microsoft.com/en-us/magazine/dn683793.aspx 进行预览。

      using System;
      using System.Console; // using the Console class here
      
      public class Program
      {
          public static void Main()
          {
              // Console.WriteLine is called here
              WriteLine("Hello world!");
          }
      }
      

      “Roslyn”C# 编译器的 official documentation 将该功能列为“完成”

      【讨论】:

      • Jack 敏捷,Jack 敏捷……使用 C# 静态使用!我无法表达我对这个功能有多么激动。多年来,我一直热切地等待这种表达能力进入语言,但没想到我会看到这一天。
      【解决方案4】:

      不,C# 中不存在这样的功能。您需要指定静态方法所属的类,除非您已经在同一个类的方法中。

      在 C# 中,虽然你有 extension methods 模仿这个。

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多